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;
}
};