zoukankan      html  css  js  c++  java
  • Next Permutation

    问题:给定一个数组,输出对该数组排序时只比当前数组大一级的数组,如果没有,则输出从低到高的排序数组

    示例:

    输入:[1,2,3] 输出:[1,3,2]

    输入:[3,2,1] 输出:[1,2,3]

    输入:[5,5,7] 输出:[5,7,5]

    解决思路:从右到左,固定某个位置,从右到该位置之前的一个位置进行遍历,如果数组元素大于固定的位置,则进行交换,之后对该位置右边的元素进行排序。如果最终没有发生交换,则将数组翻转。

    Python代码:

    class Solution(object):
        def nextPermutation(self, nums):
            """
            :type nums: List[int]
            :rtype: None Do not return anything, modify nums in-place instead.
            """
            length = len(nums)
            flag = False
            if length == 1:
                return
            i = length - 2
            while i >= 0:
                j = length - 1
                while j > i:
                    if nums[i] < nums[j]:
                        nums[i],nums[j] = nums[j],nums[i]
                        flag = True
                        # Sort elements after nums[i]
                        if length-i-1 >= 2:
                            for n in range(i+1,length-1):
                                fl = True
                                for m in range(i+1,length-n+i):
                                    if nums[m] > nums[m+1]:
                                        nums[m],nums[m+1] = nums[m+1],nums[m]
                                        fl = False
                                if fl:
                                    break
                        return 
                    j -= 1
                i -= 1
            if not flag:
                nums.reverse()
                        
  • 相关阅读:
    网站加载速度优化的14个技巧
    op+3g
    Xmind 快捷键
    Resty 一款极简的restful轻量级的web框架
    linux磁盘限额配置:quota命令
    常用报表工具
    http://mirror2.openwrt.org/sources/
    op挂载摄像头
    supported platform
    OpenWrt Kernel Module Creation Howto
  • 原文地址:https://www.cnblogs.com/wenqinchao/p/10709939.html
Copyright © 2011-2022 走看看