对于该题,我本来兴致勃勃地想到了两个优化,但从提交结果来看根本看不出来有什么区别,但我发4我说的都是真的 -3-

 1  public void nextPermutation(int[] nums) {
2 if (nums.length <= 1) return;
3
4 for (int s = nums.length - 1; s >= 0; s--) {
5 if (s == 0) {
6 //把这个for循环放到大循环里,重复利用寄存器已缓存数据,原理类似数组分块优化
7 for (int j = 0, k = nums.length - 1; j < k; j++, k--) swap(nums,j,k);
8 return;
9 }
10 if (nums[s - 1] < nums[s]) {
11 int v = Integer.MAX_VALUE, index = -1;
12 for (int j = nums.length - 1; j >= s; j--) {
13 if (nums[s - 1] < nums[j] && nums[j] < v) {
14 v = nums[j];
15 index = j;
16 }
17 }
18
19 swap(nums,s-1,index);
20 for (int j = s, k = nums.length - 1; j < k; j++, k--) swap(nums,j,k);
21 return;
22 }
23 }
24 }
25 //final在Java里有内联优化的作用,不会产生额外的函数调用消耗
26 final void swap(int[]a,int i,int j){
27 int t=a[i];
28 a[i]=a[j];
29 a[j]=t;
30 }

leetcode 31. 下一个排列 【时间击败 100%】 【内存击败 92.17%】的更多相关文章

  1. Java实现 LeetCode 31下一个排列

    31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许 ...

  2. LeetCode 31. 下一个排列 | Python

    31. 下一个排列 题目 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改, ...

  3. LeetCode 31. 下一个排列(Next Permutation)

    题目描述 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常 ...

  4. leetcode 31下一个排列

    /** 验证一般情况(元素数目大于等于3)有几个情况分析:两个特殊情况: 6 5 4 3 2 1 完全反序,这种序列没有下一个排序,因此重新排序1 2 3 4 5 6 1 2 3 4 5 6 完全升序 ...

  5. LeetCode:下一个排列【31】

    LeetCode:下一个排列[31] 题目描述 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排 ...

  6. Leetcode题库——31.下一个排列

    @author: ZZQ @software: PyCharm @file: nextPermutation.py @time: 2018/11/12 15:32 要求: 实现获取下一个排列的函数,算 ...

  7. Leetcode题目31.下一个排列(中等)

    题目描述: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外 ...

  8. 【LeetCode】下一个排列【找规律】

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空间. ...

  9. 【每日一题】【排序sort重载】【工具类】2021年12月23日-31. 下一个排列

    实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数). 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须 ...

  10. LeetCode HOT 100:下一个排列

    题目:31. 下一个排列 题目描述: 本题是给你一个整数数组,返回该数组的下一个线性顺序排列. 举个例子:给你一个[1, 2, 3]的数组,他的线性排列顺序从小到大依次为[1, 3, 2],[2, 1 ...

随机推荐

  1. 【转载】EXCEL VBA Workbook、Worksheet、Range的选择和操作

    Workbooks对象是Microsoft Excel 应用程序中当前打开的所有 Workbook 对象的集合.有close.add.open等方法.   Workbooks.close        ...

  2. 【CTF隐写工具】binwalk工具使用方法

    工具简介 Binwalk 是一种快速.易于使用的工具,用于分析.逆向工程和提取固件映像. 工具环境 Linux Linux环境下安装 直接使用apt/yum进行安装 apt install binwa ...

  3. tornado原理介绍及异步非阻塞实现方式

    tornado原理介绍及异步非阻塞实现方式 以下内容根据自己实操和理解进行的整理,欢迎交流~ 在tornado的开发中,我们一般会见到以下四个组成部分. ioloop: 同一个ioloop实例运行在一 ...

  4. 刷题笔记——2181.信息学奥赛一本通T1005-地球人口承载力估计

    题目 2181.信息学奥赛一本通T1005-地球人口承载力估计 2999.牛吃牧草 代码 x, a, y, b = map(int,input().strip().split()) z = float ...

  5. 2023牛客寒假算法基础集训营2 ABCDEFHJKL

    比赛链接 A 题解 知识点:数学. 用 \(n\) 减去区间1的端点得到匹配的一个区间,求一下与区间2的交集. 一个小公式,两区间 \([L_1,R_1]\) 和 \([L_2,R_2]\) 的交集长 ...

  6. 【分析笔记】全志平台 TWI 上拉电压异常的问题

    记录说明 原本这么简单的芯片,没有必要做记录,后来发现其中有一颗单独挂在 TWI2 无法通信,而主要原因是最容易忽视的电源域的问题,因此记录一下这件事情. 芯片介绍 MCP3021 是一颗 10BIT ...

  7. Python中的枚举类enum

    0. 本文来历 上一篇文章,我写了Pytest插件pytest-order指定用例顺序 我当时就比较好奇它的顺序和英文的对应关系,肯定是写死的,找了下就发现在源码sorter.py中定义了一个dict ...

  8. 深入解读.NET MAUI音乐播放器项目(一):概述与架构

    系列文章将分步解读音乐播放器核心业务及代码: 深入解读.NET MAUI音乐播放器项目(一):概述与架构 深入解读.NET MAUI音乐播放器项目(二):播放内核 深入解读.NET MAUI音乐播放器 ...

  9. 【转载】JAVA - 解决:Java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

    抄:https://www.cnblogs.com/sunylat/p/13339507.html 问题原因: 高版本的JDK中不包含javax.xml.bind包了! 解决方法: 1,如果是mave ...

  10. Vditor文件上传跨域

    Vditor文件上传跨域 官网是发了一次请求,而我这里发了两次请求. 有一个option请求,形成了跨域. 虽然我在后端配置了允许跨域,但事实上,我用JWT的拦截器把文件上传的接口给拦截了. 且走的是 ...