题目:上一个排列
2015-08-22 23:25
363 查看
给定一个整数数组来表示排列,找出其上一个排列。
您在真实的面试中是否遇到过这个题?
Yes
样例
给出排列[1,3,2,3],其上一个排列是[1,2,3,3]
给出排列[1,2,3,4],其上一个排列是[4,3,2,1]
注意
排列中可能包含重复的整数
标签 Expand
相关题目 Expand
解题思路:
比如排列是(2,4,1,3,5,6),前一个排列是(2,3,6,5,4,1)。求解过程如下
1.从右往左找到第一个i,a[i]>a[i+1] ,上例中就是4,对应位置为1
下面分2种情况:
找到了i>0,
2.从i开始,从左往右找到a[j+1]>a[i] ,上例即为3,对应位置为3
3.交换数组中i,j中的值,数组为(2,3,1,4,5,6)
4.将数组中i+1后的数字翻转,数组既是(2,3,6,5,4,1)
没有找到,既是全部是递减的,比如123456,其直接翻转全部既是上一个排列
public class Solution { /** * @param nums: A list of integers * @return: A list of integers that's previous permuation */ public ArrayList<Integer> previousPermuation(ArrayList<Integer> nums) { // write your code if(null==nums||0==nums.size()) return null; ArrayList<Integer> res = new ArrayList<>(); 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; 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--; } } }
给定一个整数数组来表示排列,找出其上一个排列。
您在真实的面试中是否遇到过这个题?
Yes
样例
给出排列[1,3,2,3],其上一个排列是[1,2,3,3]
给出排列[1,2,3,4],其上一个排列是[4,3,2,1]
注意
排列中可能包含重复的整数
标签 Expand
相关题目 Expand
解题思路:
比如排列是(2,4,1,3,5,6),前一个排列是(2,3,6,5,4,1)。求解过程如下
1.从右往左找到第一个i,a[i]>a[i+1] ,上例中就是4,对应位置为1
下面分2种情况:
找到了i>0,
2.从i开始,从左往右找到a[j+1]>a[i] ,上例即为3,对应位置为3
3.交换数组中i,j中的值,数组为(2,3,1,4,5,6)
4.将数组中i+1后的数字翻转,数组既是(2,3,6,5,4,1)
没有找到,既是全部是递减的,比如123456,其直接翻转全部既是上一个排列
相关文章推荐
- [UVA 10817]Headmaster's Headache[状压DP]
- 编写高质量代码改善C#程序的157个建议——建议120:为程序集指定强名称
- 生成伪随机整数
- android自定义view错误收集
- MFC数据类型(data types)
- win7_oracle11g_64位连接32位PLSQL_Developer
- SPOJ - NSUBSTR Substrings 后缀自动机
- 数据结构-什么是算法?
- 野人学Android基础篇之HelloWorld程序第一课--程序目录介绍
- 剑指off-求两个整数的和
- C语言字符串、指针和内存问题总结
- 我是菜鸟:深入java容器内部
- 跟踪 Ring3 - Ring0 的执行流程
- 介绍两个很好用的jquery插件
- TextView跑马灯效果
- 【传递正能量】献给默默追梦的人
- hdu 3605 二分图多重匹配
- 洛谷1309 瑞士轮 解题报告
- NSFileManager
- 新手应该掌握的Linux命令