力扣-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,即可得到最小的升序序列。

相关推荐
小年糕是糕手6 分钟前
【C++】类和对象(二) -- 构造函数、析构函数
java·c语言·开发语言·数据结构·c++·算法·leetcode
kupeThinkPoem32 分钟前
跳表有哪些算法?
数据结构·算法
前端小L41 分钟前
图论专题(二十一):并查集的“工程应用”——拔线重连,修复「连通网络」
数据结构·算法·深度优先·图论·宽度优先
88号技师1 小时前
2025年9月一区SCI-孤行尺蠖觅食优化算法Solitary Inchworm Foraging-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
前端小L1 小时前
图论专题(二十五):最小生成树(MST)——用最少的钱,连通整个世界「连接所有点的最小费用」
算法·矩阵·深度优先·图论·宽度优先
前端小L1 小时前
图论专题(二十三):并查集的“数据清洗”——解决复杂的「账户合并」
数据结构·算法·安全·深度优先·图论
CoovallyAIHub1 小时前
破局红外小目标检测:异常感知Anomaly-Aware YOLO以“俭”驭“繁”
深度学习·算法·计算机视觉
点云SLAM2 小时前
图论中邻接矩阵和邻接表详解
算法·图论·slam·邻接表·邻接矩阵·最大团·稠密图
啊董dong2 小时前
课后作业-2025年11月23号作业
数据结构·c++·算法·深度优先·noi
星释2 小时前
Rust 练习册 80:Grains与位运算
大数据·算法·rust