31. Next Permutation
来源:互联网 发布:java invokeAll 测试 编辑:程序博客网 时间:2024/05/16 18:56
Next Permutation
题意:
求下一个排列
主要原理可以看下面这个链接:
http://blog.csdn.net/qq575787460/article/details/41215475
代码实现
基本原理:
在当前序列中,从尾端往前寻找两个相邻元素,前一个记为first,后一个记为second,并且满足first 小于 second。然后再从尾端寻找另一个元素number,如果满足first 小于number,即将第first个元素与number元素对调,并将second元素之后(包括second)的所有元素颠倒排序,即求出下一个序列
example: 6,3,4,9,8,7,1 此时 first = 4,second = 9 从尾巴到前找到第一个大于first的数字,就是7 交换4和7,即上面的swap函数,此时序列变成6,3,7,9,8,4,1 再将second=9以及以后的序列重新排序,让其从小到大排序,使得整体最小,即reverse一下(因为此时肯定是递减序列) 得到最终的结果:6,3,7,1,4,8,9
public class Solution { public void nextPermutation(int[] nums) { if(nums.length <= 1) ///排除不可能 return; int i = nums.length - 1; for(;i > 0; i--){ ///找出一个降序的地方 if(nums[i] > nums[i-1]){ break; } } if(i != 0){ //然后进行交换,如果等于0,表示这是一个降序的数组,直接进行反转 swap(nums , i-1); } reverse(nums , i); //进行反转 } public void swap(int[] a , int i){ for(int j = a.length - 1; j > i; j--){ if(a[j] > a[i]){ int t = a[j]; a[j] = a[i]; a[i] = t; break; } } } public void reverse(int[] a , int i){ int right = a.length - 1; int left = i; while(right > left){ int temp = a[right]; a[right] = a[left]; a[left] = temp; left++; right--; } }}
0 0
- [LeetCode]31.Next Permutation
- LeetCode --- 31. Next Permutation
- [Leetcode] 31. Next Permutation
- LeetCode 31.Next Permutation
- 31. Next Permutation
- [leetcode] 31.Next Permutation
- [leetcode] 31. Next Permutation
- *LeetCode 31. Next Permutation
- 31. Next Permutation
- Leetcode 31. Next Permutation
- 31. Next Permutation
- 31. Next Permutation
- 31. Next Permutation
- leetcode 31. Next Permutation
- 31. Next Permutation LeetCode
- 31. Next Permutation
- 31. Next Permutation
- 31. Next Permutation
- git中手动删除的文件如何在git中删除
- 设置table的td宽度,不随文字变宽
- Android命名规范
- 关于ehcache缓存中eternal及timeToLiveSeconds和timeToIdleSeconds的说明
- 最小二乘法
- 31. Next Permutation
- winrar key
- Bloom Filter概念和原理
- pdo操作使用3
- Linux下解决./configure ,make,make install的报错
- tuleap开发
- Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is inse
- Android Voip开发总结
- openldap