首页 > 其他分享 >189.旋转数组

189.旋转数组

时间:2023-10-19 15:57:58浏览次数:45  
标签:轮转 nums int 旋转 99 数组 189 翻转

目录

1.题目

  • 给定一个整数数组 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]

法一、利用python自带的reverse函数

  • 思路:先翻转整个数组,再分别翻转前k个和后n-k个。

  • 注意特殊情况:k有可能大于数组长度,用k %= n保证k小于n,如下图:

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        n=len(nums)
        k %= n  #保证k小于n
        nums.reverse()
        nums[0:k]= reversed(nums[0:k])
        nums[k:n]= reversed(nums[k:n])
  • 也可用切片实现翻转
class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        n = len(nums)
        k %= n
        nums[:] = nums[::-1]#整个数组翻转
        nums[:k] = nums[:k][::-1]#前k个翻转
        nums[k:] = nums[k:][::-1] #从k到最后翻转

法二、辅助空间法

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        n = len(nums)
        k %= n
 
        tmp = nums[n - k:].copy()#先用一个临时数组存储后K个元素
        for i in range(n - k - 1, -1, -1):#原数组元素向后移动k个
            nums[i + k] = nums[i]
        for i in range(0, k):#把临时数组存的元素放到数组前面
            nums[i] = tmp[i]

标签:轮转,nums,int,旋转,99,数组,189,翻转
From: https://www.cnblogs.com/lushuang55/p/17774867.html

相关文章

  • numpy的数据类型转换和数组广播
    numpy对象的常用属性第一种方法装好python,然后打开终端输入pipinstalljupyter(如果觉得速度慢可以加上镜像站-ihttps://pypi.douban.com/simple/),然后再输入pipinstallnotebook(这里和前面一样,觉得慢就加镜像),打开在终端输入jupyternotebook。另一种方法就是去anacond......
  • C#判断当前时间是否在规定时间段范围内(二维数组超简版)
    直接上C#代码TimeSpannowTime=DateTime.Now.TimeOfDay;string[,]arr={{"7:50","8:10"},{"9:55","10:15"},{"13:55","14:10"},{"15:55","16:10"},{"18:55",......
  • 【LCT、树状数组】CF1137F Matches Are Not a Child's Play
    哈人*3400,是不是贺过了个1F(?单点编号\(\tomax+1\),动态维护prufer序列删除了哪些点。看似不可做,但是不难发现我们一个点被更改其他点的相对次序不会改变,反而\(x\tomax\)这条链的删除次序到了最后面。然后我们以权值最大点为根,不难发现每次只是对根到该点的链更改了......
  • 数组中的一个值接收到一个字符需要转成int类型处理
    例如定义一个charrxbuff[10]的数组数组中的一位收到一个字符rxbuff[2]='I'转成int类型需要定义charstr[1];str[0]=rxbuff[2];str[1]='\0';//把str转成字符串atoi(str);//函数转换例如charstr[1];str[0]=(char)uart_pump.Rx_Buf[3];str[1]='\0';usR......
  • 1189
    给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 "balloon"(气球)。字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "balloon"。 示例1:输入:text="nlaebolko"输出:1示例2:输入:text="loonbalxballpoon"输出......
  • 代码训练营第八天(Python)| 344.反转字符串、541. 反转字符串II、05.替换空格、151.翻转
    344.反转字符串双指针法时间复杂度为:O(n),空间复杂度为:O(1)classSolution:defreverseString(self,s:List[str])->None:"""Donotreturnanything,modifysin-placeinstead."""left,right=0,len(s......
  • IO流,字节数组输入流,字节数组输出流
    字节数组流:通常用在流和数组需要转换的地方字节数组输入流:ByteArraylnputStream 说白了,FilelnputStream是把文件当做数据源。ByteArraylnputStream则是把内存中的”字节数组对象”当做数据源。 ByteArraylnputStream的构造方法中需要传入一个字节数组对象  结果: ......
  • 将数组转换为ArrayList
    内容来自DOChttps://q.houxu6.top/?s=将数组转换为ArrayList给定一个类型为Element[]的数组:Element[]array={newElement(1),newElement(2),newElement(3)};如何将这个数组转换为类型为ArrayList<Element>的对象?ArrayList<Element>arrayList=???;将数组转......
  • 如何将一个元素插入到数组的特定索引位置?
    内容来自DOChttps://q.houxu6.top/?s=如何将一个元素插入到数组的特定索引位置?我正在寻找一个JavaScript数组插入方法,类似于:arr.insert(index,item)最好是在jQuery中,但任何JavaScript实现都可以。你想要在原生数组对象上使用splice函数。arr.splice(index,0,item......
  • vue 数组 下标/索引 响应式修改
    this.data对象中的一个数组属性[3]="ttt";//修改后,值有时候在模板中能更新(可能第一次是可以的?),有时候不更新splice实现的等效效果:this.data对象中的一个数组属性.splice(3,1,"ttt");$set实现的等效效果:this.set(this.data对象中的一个数组属性,3,"ttt");......