NextPermutation,寻找下一个全排列
问题描述:给定一个数组是一个全排列,寻找下一个全排列。例如123->132, 321->123, 115->151.
算法分析:从后往前寻找顺序,找到后从往前寻找第一个大于当前元素,即第一个逆序,然后元素交换,重新sort当前元素后面的元素。如果都是逆序,reverse数组。
package Leecode_Permutation; import java.util.Arrays; public class NextPermutation {
public void nextPermutation(int[] num)
{
if(num.length <= 1)
{
return ;
}
//从后往前,找正序,下一个是逆序
for(int i = num.length - 2; i >= 0; i--)
{
if(num[i] < num[i+1])
{
int j;
for(j = num.length - 1; j >= i; j--)
{
if(num[i] < num[j])
{
break;
}
}
// swap the two numbers.
//num[i] = num[i] ^ num[j];
//num[j] = num[i] ^ num[j];
//num[i] = num[i] ^ num[j]; int temp = num[i];
num[i] = num[j];
num[j] = temp; //sort the rest of arrays after the swap point.
Arrays.sort(num, i+1, num.length);
return ;
}
}
//如果都是逆序,说明下一个全排列是正序,reverse it。
for(int i = 0; i < num.length / 2; i++)
{
int tmp = num[i];
num[i] = num[num.length - i - 1];
num[num.length - i - 1] = tmp;
}
return ; }
public static void main(String[] args) {
NextPermutation np = new NextPermutation();
int[] num = {1,2};
np.nextPermutation(num);
for (int i : num) {
System.out.println(i);
}
}
}
NextPermutation,寻找下一个全排列的更多相关文章
- LeetCode 31 Next Permutation(下一个全排列)
题目链接: https://leetcode.com/problems/next-permutation/?tab=Description Problem :寻找给定int数组的下一个全排列(要求 ...
- 寻找下一个结点 牛客网 程序员面试金典 C++ java Python
寻找下一个结点 牛客网 程序员面试金典 C++ java Python 题目描述 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继). 给定树的根结点指针TreeNode* root ...
- 31. Next Permutation (下一个全排列)
Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...
- LeetCode 31. 下一个排列(Next Permutation)
题目描述 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常 ...
- 556. 下一个更大元素 III
556. 下一个更大元素 III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 1 ...
- 引爆公式让你的APP游戏成为下一个“爆款”
在2014年的移动互联网领域,“魔漫相机”是一款值得关注的产品.虽然没有腾讯.百度或阿里巴巴等大资源的支持,但是这款应用一上线就在中国市场发展迅猛,日下载量超过80万次,最高一日达300万次.类似的成 ...
- C++构造 下一个排列 的函数
今天围观刘汝佳神犇的白书发现了一个好用的函数: next_permutation(); 可以用于可重, 或者不可重集, 寻找下一个排列. 时间复杂度尚不明. //适用于不可重和可重集的排列. # in ...
- poj 1146 ID Codes (字符串处理 生成排列组合 生成当前串的下一个字典序排列 【*模板】 )
ID Codes Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6229 Accepted: 3737 Descript ...
- 排列算法汇总(下一个排列,全排列,第K个排列)
一.下一个排列 首先,STL提供了两个用来计算排列组合关系的算法,分别是next_permutation和prev_permutation. next_permutation(nums.begin() ...
随机推荐
- java.lang.IllegalArgumentException: Failed to decrypt.
加密失败. 附加信息: org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Co ...
- Java程序员面试题集(1-50
下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最 ...
- jmeter操作 — 文件上传、下载
一.上传/下载的过程. 上传的过程就是你把你本地的文件,扔到服务器上的这么一个过程. 下载呢,就是把服务器上的文件拿过来,然后存到你本地的这么一个过程. 总结 ...
- CCCallFunc, CCCallFuncN, CCCallFuncND 三者的区别
今天学习过程中,自己敲了一个例子,结果在执行Action的时候出现了错误.经排查发现是CCCallFunc使用的问题,应该使用CCCallFuncN,然后搜了下他们的区别,才知道,是因为有一个参数的问 ...
- 微信js获取地理位置
1.绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 备注:登录后可在“开发者中心”查看对应的接口权限. 2.引入js文件 <script type=&q ...
- 让你的代码量减少3倍!使用kotlin开发Android
(一) 创建Kotlin工程 (二) –秘笈!扩展函数 (三) 缩短五倍的Java Bean 本项目使用的代码地址
- 批量处理任务进度条控制—基于BackgroundWorker
今天要做一个批量处理图层数据的功能,希望在处理任务过程中,各个任务都能在进度条中显示自己的当前进度,决定继续使用强大易用的BackgroundWorker组件.通过在RunWorkerComplete ...
- VGA显示
VGA控制器的编写主要是了解VGA的显示标准和时序,如1024X768@60Hz,确定时钟频率(65MHz=1344X806X60),列像素时间等于时钟周期,扫描从左到右.从上到下(类似于电视扫描PA ...
- 关于shared pool的深入探讨(二)【转载】
关于shared pool的深入探讨(二) 作者:eygle |English [转载时请标明出处和作者信息]|[恩墨学院 OCM培训传DBA成功之道]链接:http://www.eygle.co ...
- apache错误 Unable to open process" with PID 4!
今天打开Apache的时候报错: 22:15:30 [Apache] Problem detected! 22:15:30 [Apache] Port 80 in use by "Una ...