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

相关推荐
不懒不懒11 小时前
【针对路面识别数据集,结合三轴加速度标准化数据及多路面识别需求,以下是算法选择与处理方案】
算法
Reart12 小时前
Leetcode 121. 买卖股票的最佳时机(717)
后端·算法
会编程的小孩12 小时前
初识数据类型以及变量定义
数据结构·算法
Reart12 小时前
Leetcode 337.打家劫舍3(717)
后端·算法
梅梅绵绵冰12 小时前
数据结构-时间复杂度
数据结构·算法
遥感知识服务12 小时前
盐碱地、白屋顶和裸土都很亮,卫星怎样分清?
人工智能·算法·机器学习
可编程芯片开发12 小时前
基于PID控制器的车辆控制系统simulink建模与仿真
算法
广州灵眸科技有限公司12 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 系统操作-线进程操作
数据库·单片机·嵌入式硬件·算法·php
-dzk-13 小时前
【哈希】LC 49.字母异位词分组
算法·哈希算法
·醉挽清风·13 小时前
学习笔记—算法—算法题
笔记·学习·算法