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点之后的点从两端互换位置

猜你喜欢

转载自www.cnblogs.com/tiansiyuan-program/p/9774952.html