博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jan 15 - Next Permutation; Array; Pointer;
阅读量:5300 次
发布时间:2019-06-14

本文共 1043 字,大约阅读时间需要 3 分钟。

从后面开始推倒 最后一个是最大数, 当前位置的后一个位置是后面一段的最小数,再分别对和最小数和最大数比较,如果小于最小数直接交换两个位置的值,如果小于最大数,则从末尾开始找最前位置刚刚大于当前值,交换两个位置的值。

代码:

public class Solution {    public void nextPermutation(int[] nums) {        int len = nums.length;        int min = nums[len-1], max = nums[len-1];        int minIndex = len-1, maxIndex = len - 1;        for(int i = nums.length - 1; i >= 0; i--){            if(nums[i] < min){                nums[minIndex] = nums[i];                nums[i] = min;                break;            }            if(nums[i] < max){                int j = maxIndex;                while(j >= 1 && nums[i] < nums[j-1]) j--;                int temp = nums[j];                nums[j] = nums[i];                nums[i] = temp;                break;            }            else{                max = nums[i];                for(int j = i; j < len-1; j++) nums[j] = nums[j+1];                nums[len-1] = max;                minIndex = i;                maxIndex = len - 1;            }        }    }}

  

转载于:https://www.cnblogs.com/5683yue/p/5135238.html

你可能感兴趣的文章
你不知道的CSS
查看>>
HashMap深度解析(一)
查看>>
Java跨平台原理
查看>>
批梯度下降和随机梯度下降的区别和代码实现
查看>>
android常见错误与问题
查看>>
[Scala] 快学Scala A1L1
查看>>
[转]Oracle DB 使用快速恢复区
查看>>
特性属性 @property
查看>>
Jmeter跨线程组传递变量
查看>>
UOJ #225.排队
查看>>
MS SQL Server2012中的IIF函数
查看>>
判断3389端口是否开启
查看>>
LINQ 入门
查看>>
不变集合 NSSet
查看>>
标准C程序设计七---54
查看>>
《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---47
查看>>
Hibernate=====HQL实用技术
查看>>
Silverlight中使用MVVM(3)
查看>>
oracle 11g空表导不出问题
查看>>
phpstudy 下开启openssl
查看>>