leetcode解题之31. Next Permutation java 版(下一个排列)
来源:互联网 发布:mysql connector java 编辑:程序博客网 时间:2024/05/22 07:50
31. Next Permutation
Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.
If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).
The replacement must be in-place, do not allocate extra memory.
Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.1,2,3
→ 1,3,2
3,2,1
→ 1,2,3
1,1,5
→ 1,5,1
了解了全排序之后,其实就是交换数据,比如说需要交换第i和第j个元素(假设i<j),则交换完之后,第i+1及其之后的元素要进行重排序,使其递增;那么现在的问题就是找到要交换的元素,我所做就是从后往前查找:
(1)比如现在要查倒数第k个元素,则从倒数第一个元素到倒数第k+1个元素进行顺序查找,若找到其中有一个元素的值大于倒数第k个元素的值,则进行交换,并在交换后按照上述方法排序。
(2)若后面元素的值都比倒数第k个值小(或相等),则倒数第k个元素到倒数第一个元素形成一个非严格递减序列,则k--,继续(1);
public void nextPermutation(int[] nums) {if (nums == null || nums.length <= 1)return;// 从后向前找到第一个不满足逆序的元素int i = nums.length - 2;// 注意,这里有=,可以排除含有重复元素的情况while (i >= 0 && nums[i] >= nums[i + 1])i--;if (i >= 0) {// 从右往左找到第一个大于nums[i]的元素// 注意等号// 也就是从i+1开始找到最小的一个比nums[i]大的元素int j = nums.length - 1;while (nums[j] <= nums[i])j--;swap(nums, i, j);}// 如果nums是逆序,则i是-1,和下面逆置一样// System.out.println(i);// 将i之后的元素逆置int k = nums.length - 1;i++;for (; i < k; i++, k--)swap(nums, i, k);}// 交换public void swap(int[] arr, int i, int j) {arr[i] = arr[i] ^ arr[j];arr[j] = arr[i] ^ arr[j];arr[i] = arr[i] ^ arr[j];}
0 0
- leetcode解题之31. Next Permutation java 版(下一个排列)
- LeetCode 31. Next Permutation(下一个排列)
- Leetcode #31. Next Permutation 下一个全排列 解题报告
- LeetCode OJ 之 Next Permutation(下一个排列)
- leetcode:31. Next Permutation 下一个排列
- LeetCode | Next Permutation(下一个排列)
- LeetCode 31 Next Permutation(下一个排列)
- LeetCode 31 Next Permutation (下一个排列)
- 31. Next Permutation (下一个排列)
- 31.Next Permutation 下一个排列
- leetcode:Next Permutation (求下一个排列) 【面试算法题】
- [LeetCode]Next Permutation下一个排列问题
- LeetCode[31] Next Permutation 求下一个排列
- 下一个排列(Next Permutation)
- Next Permutation 下一个排列
- Next Permutation 下一个排列
- [C++]LeetCode: 79 Next Permutation (下一个排列,常见面试题)
- leetCode 31.Next Permutation (下一个字典序排序) 解题思路和方法
- LeetCode 101. Symmetric Tree
- 阿里云centos7 安装与卸载mysql
- LeetCode 292. Nim Game
- Android Fragment与Activity通过回调实现通信
- 凑算式
- leetcode解题之31. Next Permutation java 版(下一个排列)
- 国产“联合作战态势可视化平台”首交答卷
- JVM调优总结 -Xms -Xmx -Xmn -Xss
- 一起学fusioncharts 总结
- 程序员的进步在哪里?
- Hdu 4617 立体几何 异面直线距离
- 多线程运行不完整可能原因
- hdu 4915 Parenthese sequence (贪心+模拟)
- 文章标题