给定一个若干整数的排列,给出按正数大小进行字典序从小到大排序后的下一个排列。
如果没有下一个排列,则输出字典序最小的序列。
样例
左边是原始排列,右边是对应的下一个排列。
1,2,3
→ 1,3,2
3,2,1
→ 1,2,3
1,1,5
→ 1,5,1
挑战
不允许使用额外的空间。
分析:从后往前找,找到第一对(i,j),使得nums[i]<num[j],然后将两者兑换后,后面部分排序即可。
代码:
class Solution {
public:
/**
* @param nums: a vector of integers
* @return: return nothing (void), do not return anything, modify nums in-place instead
*/
void nextPermutation(vector<int> &nums) {
// write your code here
int n = ();
for(int i=n-1;i>=0;i--)
{
for(int j=n-1;j>i;j--)
{
if(nums[i]<nums[j])
{
swap(nums[i],nums[j]);
sort(()+i+1,());
return;
}
}
}
sort((),());
}
};