lintode(52)下一个排列
来源:互联网 发布:smali语法编程 编辑:程序博客网 时间:2024/04/30 14:03
描述:
给定一个整数数组来表示排列,找出其之后的一个排列。
注意事项
排列中可能包含重复的整数
样例:
给出排列[1,3,2,3]
,其下一个排列是[1,3,3,2]
给出排列[4,3,2,1]
,其下一个排列是[1,2,3,4]
思路 :
找出第一个(i-1)>(i)的点,然后找出比nums[i-1]大且最接近的值,和其交换位置,然后对后面的序列进行排序
public class Solution { /** * @param nums: an array of integers * @return: An array of integers that's next permuation */ public int[] nextPermutation(int[] nums) { // write your code here if(nums == null || nums.length == 0 || nums.length == 1){ return nums; } int len = nums.length; int flag = len - 1; boolean change = false; for(int i = len - 1;i>=1;i--){ if(nums[i] > nums[i-1]){ flag = i; change = true; break; } } if(!change){ Arrays.sort(nums); return nums; } int temp = nums[flag]; nums[flag] = nums[flag - 1]; for(int i = flag;i<len;i++){ if(nums[i] > nums[flag - 1] && nums[i] < temp){ int p = temp; temp = nums[i]; nums[i] = p; } } nums[flag - 1] = temp; for(int i = flag;i<len;i++){ for(int j = i+1;j<len;j++){ if(nums[j]<nums[i]){ int m = nums[i]; nums[i] = nums[j]; nums[j] = m; } } } return nums; }}
0 0
- lintode(52)下一个排列
- LintCode 52-下一个排列
- LintCode 52 下一个排列
- lintcode 下一个排列(52)
- 下一个排列
- 下一个排列
- 下一个排列
- 下一个排列
- 下一个排列
- 下一个排列
- 下一个排列
- 下一个排列
- LinkCode 下一个排列、上一个排列
- POJ 1146 下一个排列
- 下一个排列(Next Permutation)
- Next Permutation 下一个排列
- 寻找下一个最大排列
- uva 146(下一个排列)
- Android安卓---Hellword 简单提示框
- Problem D: 模板是个好东西
- 手机相机和相册:仿微信自定义相册
- 机器学习工程师必知的十大算法
- Problem E: 正方形、长方形、立方体
- lintode(52)下一个排列
- linux下安装第二个tomcat
- 数据预处理与特征选择
- 关于数组的基本数据类型和引用类型
- 块级元素和行内元素有哪些?
- mysql 5.7.18解压版安装error总汇
- Problem D: 数组类(II)
- retrofit配合使用protobuf3
- L1-044. 稳赢