lintcode-52-下一个排列

52-下一个排列

给定一个整数数组来表示排列,找出其之后的一个排列。

注意事项

排列中可能包含重复的整数

样例

给出排列[1,3,2,3],其下一个排列是[1,3,3,2]
给出排列[4,3,2,1],其下一个排列是[1,2,3,4]

标签

排列 LintCode 版权所有

思路

从后往前找,找到第一对(i,j),使得 nums[i] < num[j] ,然后将两者交换后,后面部分排序即可。

code

class Solution {
public:
    /**
     * @param nums: An array of integers
     * @return: An array of integers that's next permuation
     */
    vector<int> nextPermutation(vector<int> &nums) {
        // write your code here
        int size = nums.size(), i = 0, j = 0;
        if(size == 0) {
            return vector<int> ();
        }

        for(i=size-1; i>=0; i--)  {
            for(j=size-1; j>i; j--) {
                if(nums[i]<nums[j])  {
                    swap(nums[i],nums[j]);
                    sort(nums.begin()+i+1,nums.end());
                    return nums;  
                }
            }
        }
        sort(nums.begin(),nums.end());
        return nums;  
    }
};
posted @ 2017-06-28 11:20  LiBaoquan  阅读(1174)  评论(0编辑  收藏  举报