next-permutation
来源:互联网 发布:001a航母 知乎 编辑:程序博客网 时间:2024/06/05 11:35
题目描述:找到排序数组的下一个排序
例如:
1,2,3→1,3,2
3,2,1→1,2,3
1,1,5→1,5,1
字典序排列
把升序的排列(当然,也可以实现为降序)作为当前排列开始,然后依次计算当前排列的下一个字典序排列。
对当前排列从后向前扫描,找到一对为升序的相邻元素,记为i和j(i < j)。如果不存在这样一对为升序的相邻元素,则所有排列均已找到,算法结束;否则,重新对当前排列从后向前扫描,找到第一个大于i的元素k,交换i和k,然后对从j开始到结束的子序列反转,则此时得到的新排列就为下一个字典序排列。这种方式实现得到的所有排列是按字典序有序的,这也是C++ STL算法next_permutation的思想。
public class Solution { public void nextPermutation(int[] num) { if(num == null||num.length <2) return; int index= -1; for(int i=num.length-1;i>0;i--) { if(num[i-1]<num[i]) { index=i-1; break;//找到第一个升序的相邻的元素,找到就break!! } } if(index == -1) { reverse(num,0,num.length-1); } else { int k=num.length-1; for(;k>=0&&num[k]<=num[index];k--) {} swap(num,index,k); reverse(num,index+1,num.length-1); } } public void reverse(int[] num,int start,int end) { while(start<end) { int temp=num[start]; num[start]=num[end]; num[end]=temp; start++; end--; } } public void swap(int[] num,int i,int j) { int temp=num[i]; num[i]=num[j]; num[j]=temp; }}
0 0
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- Next Permutation
- LeetCode-78.Subsets
- POJ1287 Networking
- SonarQube
- mybatis 中resultType与resultMap区别
- ACM--田忌赛马--贪心--HDOJ 1052--Tian Ji -- The Horse Racing
- next-permutation
- linux的源
- 非root用户安装python第三方模块
- sizeof ()求指针和数组时的不同
- 求两个数的最大公约数
- HTTP协议总结
- 输出一个字符串遇见‘ \0 ’停止并返回字符串字符的个数
- 宏在使用过程余函数的区别<1>
- 求出两个int(32位)整数m和n的二进制表达中,有多少bit位不同