LeetCode 刷题日记 31

本题要求由输入一个已知的数组,将该数组变为下一个更大的数组

12345

下一个更大的排列为12354

如果 该数组为降序排列,即所能组合的最大值,则将其转换为最小排列,即升序排列

观察任一数组  1 3 7  2 5 6 4

下一个比它大的排列  应为1 3 7 2 6 5 4

即 先从尾开始。找到一点 比 后一点 小

如果没找到,此时的坐标应为-1;

int i = nums.length - 2;

while( i  >= 0 && nums[i] >= nums[i+1]) {

        i--;  // i = 0 时 nums[0]  > nums[1]  说明这是个递减序列   i变为-1

}

先判断i的值 i >=0  则找到尾部遍历开始的第一个比其之后一点小的点,为凹陷的点 k 且该点之后的所有点,均为递减点

从尾部遍历。从小至大,找到第一个比 k 大的点,记录位置

将两点互换位置

之后将k点之后的点从两端互换位置

 

转载于:https://www.cnblogs.com/tiansiyuan-program/p/9774952.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值