zoukankan      html  css  js  c++  java
  • python 旋转数组 多种解题思路

    leetcode 题目描述:给定一个数组,将数组中的元素向右移动 个位置,其中 是非负数。

    • 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
    • 要求使用空间复杂度为 O(1) 的原地算法。

    举例:输入: [1,2,3,4,5,6,7]k = 3

              输出: [5,6,7,1,2,3,4]

    解释:向右旋转 1 步: [7,1,2,3,4,5,6]

        向右旋转 2 步: [6,7,1,2,3,4,5]

        向右旋转 3 步: [5,6,7,1,2,3,4]

    先说说笔者拿到题目的思路 刚开始的时候没有看到有空间复制度为1的要求 觉得 这不是很简单吗 新建一个新数组依次向后移动即可 

      

    不知道大家看得懂吗 就向后移几个位置然后取lens个值

    上代码

     1 class Solution(object):
     2     def rotate(self, nums, k):
     3         """
     4         :type nums: List[int]
     5         :type k: int
     6         :rtype: void Do not return anything, modify nums in-place instead.
     7         """
     8         lens = len(nums)
     9         temp=nums+nums
    10 
    11         for i in range(lens):
    12           
    13             nums.insert(i,temp[((lens-k+i))])  #插入第i个位置
    14             nums.pop(i+1)   #将原来第i个位置的值删除

    当然了 这种方法虽然可以通过leetcode测试 但是并不满足空间O(1)的要求

    看了别人的代码 列举两个比较好的方法

    第一个

     1     def rotate3(self, nums, k):
     2         """
     3         :type nums: List[int]
     4         :type k: int
     5         :rtype: void Do not return anything, modify nums in-place instead.
     6         """
     7         for i in range(k):        #进行k次操作
     8             last = nums.pop()    #删除最后一个值
     9             nums.insert(0, last)   #将最后一个值 放入第一个位置
    10         print(nums)

    可以看到 这种方法 每次将最后一个值删除 再存入第一个位置 很巧妙利用了pop()方法

    第二个

        def rotate4(self, nums, k):
            """
            :type nums: List[int]
            :type k: int
            :rtype: void Do not return anything, modify nums in-place instead.
            """
            nums[:] = nums[-(k % len(nums)):] + nums[:-(k % len(nums))]
            print(nums)

    第二个 简直无敌 python的简略 无人能敌 一行搞定 

    解释一下代码  如图应该很好的解释了 本质是根据k取2个区域 然后交换2个区域的顺序

  • 相关阅读:
    Java 练习(获取两个字符串中最大相同子串)
    STM32F103 实现 简易闹钟小程序
    STM32F103 实现 LCD显示年月日时分秒星期 并可逐值修改的日期 小程序
    Docker报错之“Failed to get D-Bus connection: Operation not permitted”
    数据结构解析
    每天一条DB2命令-004
    每天一条DB2命令-003
    每天一条DB2命令-002
    ElasticSearch系列
    模块三 GO语言实战与应用-BYTES包与字节串操作(下)
  • 原文地址:https://www.cnblogs.com/bob-jianfeng/p/10315501.html
Copyright © 2011-2022 走看看