LeetCode 31
作者:互联网
下一个排列
分析
首先说一件比较尴尬的事情,就是这个题目确实有面试官问到过我,我开始给出的回答就是直接找到第一逆序的地方交换就好了,没有考虑到其实找到之后应该继续从后往前找到最合适的。其实这是一个贪心的算法,当时面试官还是很棒的,给我了一个例子让我跑一下我就发现了问题,然后补足了这个地方。其实题还是要多刷刷,否则很容易出现思维漏洞。
class Solution {
public:
void nextPermutation(vector<int>& nums) {
if (!nums.size() || nums.size() == 1)return;
int i = nums.size() - 2, j =nums.size()-1, k = nums.size() - 1;
int flag = 0;
while (i>=0&&j>=0&&nums[i] >= nums[j]) {
i--;
j--;
}
if (i >= 0) {
while (i >= 0 && k >= 0 && nums[i] >= nums[k])k--;
swap(nums[i], nums[k]);
}
int cure = nums.size()-1;
while (j <= cure) {
swap(nums[j], nums[cure]);
cure--;
j++;
}
}
};
标签:nums,--,31,while,cure,&&,LeetCode,size 来源: https://blog.csdn.net/JustDreamer/article/details/113739937