美文网首页
51. Previous Permutation

51. Previous Permutation

作者: 刘小小gogo | 来源:发表于2018-08-25 12:10 被阅读0次
    image.png
    image.png
    https://www.geeksforgeeks.org/lexicographically-previous-permutation-in-c/
    类似于后一个组合数
    (1)从后往前找,找到第一个a[i] > a[i + 1];
    (2) 在从后往前找,找第一个是a[j] < a[i];
    (3)交换a[i] 与 a[j], 将a[i+1] 到最后, 逆序;
    class Solution {
    public:
        /*
         * @param nums: A list of integers
         * @return: A list of integers that's previous permuation
         */
        vector<int> previousPermuation(vector<int> &nums) {
            // write your code here
            if(nums.size() == 0 || nums.size() == 1) return nums;
            int i = nums.size() - 2;
            int j = nums.size() - 1;
            while(i >= 0 && nums[i] <= nums[i+1]) i--;
            if(i >= 0){
                while(nums[j] >= nums[i]) j--;
                swap(nums[i], nums[j]);
            }
            reverse(nums.begin() + i + 1, nums.end());
            return nums;
        }
    };
    

    相关文章

      网友评论

          本文标题:51. Previous Permutation

          本文链接:https://www.haomeiwen.com/subject/gqzwiftx.html