
代码:
class Solution41_meduim {
public:
void nextPermutation(vector<int>& nums) {
if (nums.empty())
return;
int subMax = nums[nums.size() - 1];
for (int i = nums.size() - 2; i >= 0; i--) {
if (subMax > nums[i]) {
// 逆序查找最小元素进行交换
vector<int> minItem({0, INT_MAX});
for (int j = i; j < nums.size(); j++) {
if (nums[j] > nums[i]) {
if (minItem[1] > nums[j]) {
minItem[0] = j;
minItem[1] = nums[j];
}
}
}
// 交换元素
swap(nums[i], nums[minItem[0]]);
//排序
sort(nums.begin() + i + 1, nums.end());
return;
}
subMax = nums[i];
}
sort(nums.begin(), nums.end());
}
};

本文介绍了一个C++实现的算法,用于寻找给定整数序列的下一个字典序更大的排列。该算法首先从序列末尾开始向前搜索,找到第一个可以与后面更大元素交换的位置,并完成交换及后续元素的排序。
614

被折叠的 条评论
为什么被折叠?



