LeetCode第三十一题-下一个排列

Next Permutation

问题简介:给定一个数组,将数字重新排列到字典上的下一个更大的数字排列,当没有这种排列方式时,即将数组升序排列

举例:

1.

给定数组[1,2,4,3,0]

结果数组[1,3,0,2,4]

解释:可以倒序看给定数组,在数字4处遇见更小的数值2时,从数组末尾处向前找打第一个比2大的数字,即3,交换两个数字,这时数组为[1,3,4,2,0],然后在交换后的数字2处往后进行反转,这时数组为[1,3,0,2,4]

2.

给定数组[5,4,3,1,0]

结果数组[0,1,3,4,5]

解释:当原数组为降序排列时,将数组反转即升序排列

注:

1.要求使用恒定的空间

2.不需要返回值,结果即为原数组nums

解法一:

当数组只有0或一个元素时即不处理数组.将数组从后向前遍历,将当前索引i处数值与i-1处相比,当遇到小于当前值时,记录i,当i为0时即为降序排序只要反转数组即可,当i不为0时,进行处理,交换倒序第一个大于i-1处的值,从i处开始反转数组

复杂度分析:

时间复杂度:o(n)都是单层遍历

空间复杂度:o(1)使用的恒定空间

小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海

原文地址:https://www.cnblogs.com/lalalaczq/p/10817995.html