给定一个若干整数的排列,给出按正数大小进行字典序从小到大排序后的下一个排列。
如果没有下一个排列,则输出字典序最小的序列。
样例
左边是原始排列,右边是对应的下一个排列。
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 = nums.size(); 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(nums.begin()+i+1,nums.end()); return; } } } sort(nums.begin(),nums.end()); } };
时间: 2024-10-13 16:10:47