LeetCode 31. 下一个排列
思路:
倒序找到k点(极值点),然后去找大于nums[k - 1]的最小的数,两个数交换,然后num.begin() + k,num.end()反转就是答案。
代码:
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int n = nums.size();
int k = n - 1;
while(k && nums[k] <= nums[k - 1]) k--;
if(k == 0) reverse(nums.begin(),nums.end());
else{
//找到第一个大于nums[k - 1]的数
int t = k;
while(t < n && nums[k - 1] < nums[t]) t++;
swap(nums[k - 1],nums[t - 1]);
reverse(nums.begin() + k,nums.end());
}
}
};
评论区