给定一个整数数组来表示排列,找出其之后的一个排列。
样例
例1:
输入:[1]
输出:[1]
例2:
输入:[1,3,2,3]
输出:[1,3,3,2]
例3:
输入:[4,3,2,1]
输出:[1,2,3,4]
注意事项
排列中可能包含重复的整数
很蛋疼的一个错误 , 最大的序列的下一个序列竟然是最小的 .....
class Solution {
public:
/**
* @param nums: A list of integers
* @return: A list of integers
*/
vector<int> nextPermutation(vector<int> &nums)
{
// write your code here
int size = nums.size();
if(size == 1)
return nums;
int i = 0;
int j = -1;
int k = -1;
for(i=size-1; i>=0; i--)
{
if(nums[i]>nums[i-1] && i >= 1)
{
j=i-1;
break;
}
}
if( j == -1)
{
sort(nums.begin(), nums.end());
return nums;
}
for(i=size-1; i>=0; i--)
{
if(nums[i] > nums[j])
{
k=i;
break;
}
}
int tmp = nums[j];
nums[j] = nums[k];
nums[k] = tmp;
// for(i=size-1, j=j+1; j<i; i--,j++)
// {
// int tmp1 = nums[j];
// nums[j] = nums[i];
// nums[i] = tmp1;
// }
sort(nums.begin()+j+1, nums.end());
return nums;
}
};