上一个排列算法java
来源:互联网 发布:openwrt防网络尖兵 编辑:程序博客网 时间:2024/05/19 23:26
给定一个整数数组来表示排列,找出其上一个排列。
样例
给出排列[1,3,2,3],其上一个排列是[1,2,3,3]
给出排列[1,2,3,4],其上一个排列是[4,3,2,1]
注意
排列中可能包含重复的整数
思路
将整数数组a遍历,找到第一个a[i]>a[i+1]的位置,然后j=i,在while循环判断是否有a[j+1]>=a[i]的,找到记录j,然后交换a[i],a[j]。最后将i位置之后的数字倒叙,并将最终结果输出。
代码
import java.util.ArrayList;import java.util.Arrays;import java.util.List;import org.junit.Test;public class Solution{ public ArrayList<Integer> previousPermuation(ArrayList<Integer> nums) { // write your code if(null==nums||0==nums.size()) return null; int i = nums.size()-2; while(i>=0){ if(nums.get(i)>nums.get(i+1)){ break; }else{ i--; } } if(i>=0){ //int j = i+1; int j=i; while(j<nums.size()-1){ if(nums.get(j+1)>=nums.get(i)){ break; }else{ j++; } } //交换i,j的值 int tmp1 = nums.get(i); int tmp2 = nums.get(j); nums.set(i,tmp2); nums.set(j, tmp1); } //翻转剩下的i+1开始的 reverse(nums, i+1); return nums; } public void reverse(ArrayList<Integer> nums,int start){ int s = start; int e = nums.size()-1; while(s<e){ int tmp1 = nums.get(s); int tmp2 = nums.get(e); nums.set(s, tmp2); nums.set(e, tmp1); s++; e--; } } @Test public void test(){ Integer []a={1,3,2,2,2,5}; List<Integer> nlistArrayList=Arrays.asList(a); ArrayList<Integer> numsArrayList=new ArrayList(nlistArrayList); /*numsArrayList.add(0, 1); numsArrayList.add(1, 3); numsArrayList.add(2, 2); numsArrayList.add(3, 4); numsArrayList.add(4, 3);*/ ArrayList<Integer> aList=previousPermuation(numsArrayList); System.out.println(Arrays.toString(aList.toArray())); /* for (int i = 0; i < aList.size(); i++) { System.out.println(aList.get(i)); }*/ }}
阅读全文
0 0
- 上一个排列算法java
- 上一个排列
- 上一个排列
- LinkCode 下一个排列、上一个排列
- 题目:上一个排列
- lintcode-上一个排列
- 上一个排列-lintcode
- Lintcode 上一个排列
- lintcode(51)上一个排列
- LintCode 51 上一个排列
- Lintcode 上一个排列
- lintcode--上一个排列
- java 全排列算法
- Java算法 排列
- java全排列算法
- 全排列算法-Java
- Java算法-扑克牌排列
- JAVA全排列算法
- ListView的使用
- 详解数据库中的视图、临时表
- 【bzoj2017】[Usaco2009 Nov]硬币游戏
- nginx的yum 和 源码包 安装的 区别
- linux下的C语言开发(makefile编写)
- 上一个排列算法java
- java流概述
- 向centos中拖放文件
- Java并发之ReentrantLock
- Http GET的传输方式
- AndroidStudio 中5.0以下的模拟器无法联网的问题 记录
- Lua学习笔记之table
- String相关
- 为电脑加装固态硬盘