• 力扣 2021.01.08


    189 旋转数组

    题目

    解法

    本文提供两种方法:

    1. 暴力破解法
    顾名思义,我们需要不停地插入、删除新节点,知道此数组完成旋转为止。
    代码如下:

    class Solution:
        def rotate(self, nums: List[int], k: int) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            if k < 0: return nums 
            temp = k % len(nums)   #移动步数
            while temp > 0:
                nums.insert(0, nums[-1])  #在数组头建立新节点,并将数组尾的元素插入
                del nums[-1]              #删除数组尾的元素
                temp -= 1
        
            return nums
    

    这种方法其实真的很暴力,但是空间复杂度,勉强可以达到O(1)。。。 :-}

    运行结果:

     
    2. py切片翻转
    在各个编程语言中,py的切片是非常有特点的。我们可以通过它来实现此功能。
    代码如下:

    class Solution:
        def rotate(self, nums: List[int], k: int) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            if k < 0: return nums
            temp = k % len(nums)                 #移动步数 
            nums.reverse()                       #数组全翻转
            nums[:temp] = nums[:temp][::-1]      #翻转移动到前面的元素
            nums[temp:] = nums[temp:][::-1]      #翻转移动到后面的元素
    
            return nums
    

    相比方法1, 方法2强了不少。文明好懂,哈哈哈:-)
    运行结果:

  • 相关阅读:
    1137 Final Grading (25 分)
    1136 A Delayed Palindrome (20 分)
    1135 Is It A Red-Black Tree (30 分)
    1134 Vertex Cover (25 分)
    1133 Splitting A Linked List (25 分)
    1074 Reversing Linked List (25 分)
    1132 Cut Integer (20 分)
    HDU 3342 Legal or Not
    IDEA解决JSP页面无法使用EL表达式问题
    25. Bootstreap 下拉菜单
  • 原文地址:https://www.cnblogs.com/young233/p/14250264.html
Copyright © 2020-2023  润新知