当前位置:   article > 正文

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

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

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

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

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

  1. class Solution {
  2. public:
  3. void nextPermutation(vector<int> &nums) {
  4. int small = nums.size() - 2;
  5. while (small >= 0 && nums[small] >= nums[small + 1])
  6. small--;
  7. int big = nums.size() - 1;
  8. if (small >= 0) { // 交换小的和较大的
  9. while (nums[big] <= nums[small])
  10. big--;
  11. swap(nums[big], nums[small]);
  12. }
  13. reverse(nums.begin() + small + 1, nums.end());
  14. }
  15. };
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/416943
推荐阅读
相关标签
  

闽ICP备14008679号