zoukankan      html  css  js  c++  java
  • 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)使用的恒定空间

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

  • 相关阅读:
    BZOJ 2434: [Noi2011]阿狸的打字机
    BZOJ 3640: JC的小苹果
    BZOJ 1444: [Jsoi2009]有趣的游戏
    BZOJ 4820: [Sdoi2017]硬币游戏
    BZOJ 3670: [Noi2014]动物园
    BZOJ 1009: [HNOI2008]GT考试
    BZOJ 3681: Arietta
    BZOJ 1941: [Sdoi2010]Hide and Seek
    BZOJ 4602: [Sdoi2016]齿轮
    BZOJ 3514: Codechef MARCH14 GERALD07加强版
  • 原文地址:https://www.cnblogs.com/lalalaczq/p/10817995.html
Copyright © 2011-2022 走看看