前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【LeetCode热题100】【技巧】下一个排列

【LeetCode热题100】【技巧】下一个排列

作者头像
叶茂林
发布2024-04-08 08:25:17
850
发布2024-04-08 08:25:17
举报
文章被收录于专栏:叶子的开发者社区

题目链接:31. 下一个排列 - 力扣(LeetCode)

就是要找这堆数字的组合中下一个较大的数,比如1243的下一个排列是1342,那怎么得到的,就是把大数放前面小数放后面这个数自然就大了,如果要接近的大,那么应该从最右边开始找一个更小一点的数,然后找第二小的数,把第二小的数和第一小的数交换

如果找到一个小的,那么说明右边的都是降序排序好的了,第二小的就是从右边开始找到第一个比刚刚找到的小数大的,并且交换之后还需要重新升序排序一下后面部分的,让这个大数变小一些

代码语言:javascript
复制
class Solution {
public:
    void nextPermutation(vector<int> &nums) {
        int small = nums.size() - 2;
        while (small >= 0 && nums[small] >= nums[small + 1])
            small--;
        int big = nums.size() - 1;
        if (small >= 0) {  // 交换小的和较大的
            while (nums[big] <= nums[small])
                big--;
            swap(nums[big], nums[small]);
        }
        reverse(nums.begin() + small + 1, nums.end());
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档