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)使用的恒定空间
小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海