侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

LeetCode 31. 下一个排列

Hope
2022-07-18 / 0 评论 / 0 点赞 / 222 阅读 / 416 字
温馨提示:
本文最后更新于 2022-08-22,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LeetCode 31. 下一个排列
思路:
image.png
倒序找到k点(极值点),然后去找大于nums[k - 1]的最小的数,两个数交换,然后num.begin() + k,num.end()反转就是答案。

代码:

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int n = nums.size();
        int k = n - 1;
        while(k && nums[k] <= nums[k - 1]) k--;
        if(k == 0) reverse(nums.begin(),nums.end());
        else{
            //找到第一个大于nums[k - 1]的数
            int t = k;
            while(t < n && nums[k - 1] < nums[t]) t++;
            swap(nums[k - 1],nums[t - 1]);
            reverse(nums.begin() + k,nums.end());
        }
    }
};

0

评论区