实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须 原地 修改,只允许使用额外常数空间。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-permutation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答:
//从最后开始,找紧邻降序的第i-1个元素
//从第i到最后的元素排序,找后面小于i-1的第一个元素,与第i-1个元素交换
//考察sort重载
class Solution {
public void nextPermutation(int[] nums) {
int len = nums.length;
for(int i = len - 1; i > 0; i--) {
if(nums[i] > nums[i - 1]) {
Arrays.sort(nums, i , len);
for(int j = i; j < len; j++) {
if(nums[j] > nums[i - 1]) {
nums[j] ^= nums[i - 1];
nums[i - 1] ^= nums[j];
nums[j] ^= nums[i - 1];
return;
}
}
}
}
Arrays.sort(nums);
return;
}
}
本文介绍了一个用于求解下一个更大排列的算法实现。该算法通过找到第一个下降元素并与其后的适当元素进行交换,再对剩余部分进行排序来实现目标。整个过程在原数组上操作,仅使用常数额外空间。

399

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



