力扣-31.下一个排列

题目链接

31.下一个排列

java 复制代码
class Solution {
    public void nextPermutation(int[] nums) {
        //1.从右往左找第一个非逆序的数a
        int left = nums.length - 2;	//这里是为了找不到顺序对的时候正好停在-1
        while (left >= 0 && nums[left] >= nums[left + 1]) {	//一定要取等号,因为相等要继续寻找
            left--;
        }
        //2.从右往左找到第一个大于a的数b
        if (left >= 0) {
            int right = nums.length - 1;
            while (right > left && nums[right] <= nums[left]) {	//取等号
                right--;
            }
            //3.交换a,b
            swap(nums, left, right);
        }
        //4.将a后面的数逆序
        reverse(nums, left + 1);
    }

    public void swap(int[] nums, int a, int b) {
        int temp = nums[a];
        nums[a] = nums[b];
        nums[b] = temp;
    }

    public void reverse(int[] nums, int begin) {
        int end = nums.length - 1;
        while (begin < end) {
            swap(nums, begin, end);
            begin++;
            end--;
        }
    }
}

小结:如果在步骤 1 找不到顺序对,说明当前序列已经是一个降序序列,即最大的序列,我们直接跳过步骤 2、3 执行步骤 4,即可得到最小的升序序列。

相关推荐
xlq2232243 分钟前
12.排序(上)
数据结构·算法·排序算法
努力学习的小廉1 小时前
我爱学算法之—— 分治-快排
c++·算法
未知陨落1 小时前
LeetCode:77.买卖股票的最佳时机
算法·leetcode
DeeGLMath1 小时前
排序算法的并行加速实现
算法·排序算法·joblib·sortingx
机器学习之心2 小时前
量子遗传算法是一种将量子计算原理与遗传算法相结合的智能优化算法,代表了进化计算的一个有趣分支
算法·量子计算
Miraitowa_cheems2 小时前
LeetCode算法日记 - Day 59: 字母大小写全排列、优美的排列
java·数据结构·算法·leetcode·决策树·职场和发展·深度优先
未知陨落3 小时前
LeetCode:81.爬楼梯
算法·leetcode
SHtop113 小时前
排序算法(golang实现)
算法·golang·排序算法
Rain_is_bad4 小时前
初识c语言————数学库函数
c语言·开发语言·算法
艾醒5 小时前
大模型面试题剖析:模型微调中冷启动与热启动的概念、阶段与实例解析
深度学习·算法