首页 > 其他分享 >LeetCode 热题 100 之 189. 轮转数组

LeetCode 热题 100 之 189. 轮转数组

时间:2023-08-02 18:23:25浏览次数:32  
标签:轮转 nums int 99 100 189 热题 def

题目

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例 1:

输入: nums = [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]

示例 2:

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]

提示:

1 <= nums.length <= 10^5
-2^31 <= nums[i] <= 2^31 - 1
0 <= k <= 10^5

进阶:

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

思路

方法一:列表的弹出与插入
利用列表的pop函数和insert函数实现,后k个数依次弹出并插入列表首部
方法二:三次翻转
首先先将整个列表翻转,再分别将下标为0-----k-1,k-----len-1这两部分分别翻转。实现移动k的效果
方法三:切片
利用python的切片进行修改

代码

方法一:列表的弹出与插入

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        l = len(nums)
        k = k % l
        temp = k
        while(temp):
            data = nums.pop()
            nums.insert(0,data)
            temp-=1

方法二:三次翻转

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        def reverse(nums: List[int], s: int,e:int):
            while(s<e):
                nums[s],nums[e] = nums[e],nums[s]
                s+=1
                e-=1
        l = len(nums)
        k = k%l
        reverse(nums,0,l-1)
        reverse(nums,0,k-1)
        reverse(nums,k,l-1)

方法三:切片

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        n = len(nums)
        k = k % n
#需要注意的是这里要使用nums[:]= 实现对nums的重新赋值,对单赋值指出下标【a】,整体赋值用【:】,部分赋值给出【起始:结束下标】
#如果使用nums = 则是在这个函数内部重新定义了一个变量叫nums
#其不是在原本的nums上进行修改。当外界对nums进行读取时,读到的仍然是原本未修改的nums
        nums[:] = nums[n - k:] + nums[:n - k]

标签:轮转,nums,int,99,100,189,热题,def
From: https://www.cnblogs.com/anamzingclown/p/17601440.html

相关文章

  • 1-100所有的素数个数
    素数:只能被1跟它本身整除的数 intsum=0; for(inti=2;i<100;i++){ booleanflag=true; for(intj=2;j<i/2;j++){ if(i%j==0){ flag=false; break; } } if(flag){ System.out.println("1-100为素数的值为:"+i); sum=sum+1; } } System......
  • 不忘初心 Windows11 Insider Preview 25915.1000 Canary预览版 无更新 纯净精简 2023.
    此版不能更新补丁,并开启按流量计费,此版保留Hyper和linux,让人期待的任务栏图标从不合并功能此版已经回归,母版来自UUPWindows11InsiderPreview25915.1000Canary频道预览版,本版本自动跳过硬件检测,优化后台进程和服务,精简一些日常不常用的组件,速度和性能比原版更胜一筹,为了保证稳......
  • R语言代做编程辅导STA305/1004 Homework 2(附答案)
    全文链接:https://tecdat.cn/?p=33341TheNHEFSsurveywasdesignedtoinvestigatetherelationshipsbetweenclinical,nutritional,andbehaviouralfactorsassessedinthefirstNationalHealthandNutritionExaminationSurveyNHANESIandsubsequentmorbidity,......
  • mysql 查询限制1000行
    如何实现MySQL查询限制1000行概述在MySQL数据库中,可以使用LIMIT关键字来限制查询结果的行数。这对于大型数据集的查询是非常有用的,可以避免查询结果过于庞大,提高查询效率。本文将详细介绍如何在MySQL中实现查询结果限制为1000行。步骤下面是实现MySQL查询限制1000行的步骤:......
  • c语言之判断100-200内的素数
    intmain()//判断100-200内的素数{ //判断素数,即只能被1和他自身整除 //1.试除法 //假设13为素数,就拿2-12的数来试着整除,若可以那就不是素数,若不可以就是素数 //由此可知:如果2到i-1的数可以被i给整除,那么i就不是素数 inti=0; intcount=0; for(i=100;i<=200;i+......
  • 撞了100次南墙才明白的道理
    撞了100次南墙才明白的道理:1、太正经的人,发不了大财。2、你越没本事,别人越欺负你。3、社会资源是有限的,好的资源需要靠抢。4、除了父母,没有人愿意无偿包容你。5、没有实力,你认识谁都没有用。6、人们只会看重你的成果,而不是你的努力。7、在竞争激烈的世界里,弱者只会被淘汰。......
  • LeetCode 热题 100 之 56. 合并区间
    题目以数组intervals表示若干个区间的集合,其中单个区间为intervals[i]=[starti,endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。示例1:输入:intervals=[[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解......
  • NETSDK1004:找不到资产文件
    错误信息严重性代码说明项目文件行禁止显示状态错误NETSDK1004找不到资产文件“C:\BaseContract\obj\project.assets.json”。运行NuGet包还原以生成此文件。BaseContractC:\ProgramFiles\dotnet\sdk\7.0.306\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDe......
  • Java 取整可以被100整除
    Java取整与被100整除的科普在Java中,我们常常需要对数字进行取整操作。而有时候,我们需要确保一个数字是100的倍数。本文将介绍Java中取整的方法以及如何确保一个数字可以被100整除。取整方法在Java中,有多种取整的方法可以使用。下面我们将介绍四种常用的取整方法。向下取整(Fl......
  • mysql启动报错:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost:330
    mysql启动报错:ERROR2003(HY000):Can'tconnecttoMySQLserveron'localhost:3306'(10061)netstat-ano|findstr3306,检查端口3306上是否有进程运行(或直接检查任务管理器中的进程),发现mysqld.exe进程未运行以管理员身份运行cmd,键入netstartmysql,遇到报错:MySQL服务......