Leetcode31 下一个排列

一、问题描述

二、解题思路

采用找、换、翻3步骤来解决这个问题:

<1>找:从右向左找到第一个可以增大的位置i,即最小的可以增大的位置;

<2>换:将该位置的数与i+1,nums.size()-1区间最小的但大于其的数交换;

<3>翻:将i+1,nums.size()-1区间翻转,由于该集合为降序,所以进行逆转,保证增幅最小。

三、代码实现

cpp 复制代码
class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        //找增幅最小的排列
        int n=nums.size();
        //1.找:从右向左找到第一个可以增大的位置i
        int i=n-2;
        while(i>=0&&nums[i]>=nums[i+1]) i--;
        //2.换:将该位置的数与[i+1,nums.size()-1]区间最小的大于其的数交换
        int j=n-1;
        if(i>=0){
            while(j>i&&nums[j]<=nums[i]) j--;
            swap(nums[i],nums[j]);
        }
        //3.翻:将[i+1,nums.size()-1]区间翻转
        reverse(nums.begin()+i+1,nums.end());
    }
};
相关推荐
第25小时记录3 分钟前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·python
王老师青少年编程27 分钟前
2026年6月GESP真题及题解(C++三级): 选择题和判断题(题解)
c++·真题·gesp·答案·csp·三级·信奥赛
C++ 老炮儿的技术栈28 分钟前
static的作用
c语言·c++·人工智能·单片机·c
岁月蹉跎的一杯酒33 分钟前
CCM-可调颜色校正与噪声权衡
图像处理·算法·isp
在所不辞兄1 小时前
选择隐式方法求解刚性ODE
算法
码爸1 小时前
贪心算法介绍与示例
算法·贪心算法
bksczm1 小时前
0基础面试3
面试·职场和发展
-dzk-1 小时前
【多维动态规划】LC 64.最小路径和
算法·动态规划
程序员老陆2 小时前
C++ 未定义行为全景:对象模型、优化边界与工程防御
开发语言·c++·程序设计
垆边人似月.2 小时前
华为机试题 :字符串压缩
算法·华为