本题要求由输入一个已知的数组,将该数组变为下一个更大的数组
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点之后的点从两端互换位置