首页 > 其他分享 >力扣---189. 轮转数组

力扣---189. 轮转数组

时间:2023-10-03 22:00:52浏览次数:43  
标签:--- right 轮转 nums int len 力扣 189 left

给定一个整数数组 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 <= 105
  • -231 <= nums[i] <= 231 - 1
  • 0 <= k <= 105

 

进阶:

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

 

由于空间复杂度 O(1),所以不能额外开辟一个数组来模拟,需要在原本的数组上模拟。

可以想到,当 k 大于 nums 的长度时,只会多绕几圈,实际效果和 k % len 相同,因此先对 k 做取余操作。

轮转,则可以通过先将 k 左右两边翻转,再将整体翻转来达成。

class Solution {
    public void rotate(int[] nums, int k) {
        int len = nums.length;
        k %= len;
        reverse(nums, 0, len - k - 1);
        reverse(nums, len - k, len - 1);
        reverse(nums, 0, len - 1);
    }
    private void reverse(int[] nums, int left, int right) {
        while (left < right) {
            int temp = nums[left];
            nums[left] = nums[right];
            nums[right] = temp;
            left ++;
            right --;
        }
    }
}

 

标签:---,right,轮转,nums,int,len,力扣,189,left
From: https://www.cnblogs.com/owlwu/p/17741721.html

相关文章

  • vue3 使用 vue-router
    安装vue-routerpnpmivue-router使用vue-router创建自己的router//@/route/index.tsimport{createRouter,createWebHashHistory}from'vue-router'importtype{RouteRecordRaw}from"vue-router"constroutes:RouteRecordRaw[]=[{......
  • Mybatis - 通过中间表查询表A和表B
    中间表中间表存储了表A的id和表B的id,除此之外还存储了自身需要的字段,如创建时间、id。xml很简单,通过多个子查询获取数据就可以了,将中间表的字段传递给子查询的column,子查询获取这个参数进行where条件查询。<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmappe......
  • FreeRTOS 原理 --- 软件定时器
     简介 有一个定时器任务,任务内读队列。启动定时器,会向队列发送消息,定时器任务读到消息后把定时器回调函数等信息作为一个链表项插入链表。当链表有链表项,算出还剩多长时间执行定时器回调函数,这个时间作为定时器任务阻塞时间。所以定时器任务重新运行要么是时间到准备运行定时器......
  • 3.Maven基础概念-坐标
    1.maven仓库地址https://repo1.maven.org/maven2/https://mvnrepository.com/2.什么是坐标Maven中坐标用户描述仓库中资源的位置3.maven坐标主要组成groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如:orgmybatis)artifactld:定义当前Maven项目名称(通常是模块名称......
  • 【前端规范全攻略】开启高效开发之旅!ESLint + Prettier + husky + lint-staged+Commit
    本文从两个方向出发:1、git提交规范;2、代码风格统一假如团队中的小伙伴在提交代码时没有遵循规范要求,例如只写了一个"修改"或"更新,这会给团队中其他小伙伴造成困扰呢,不得不花时间查看代码和推测逻辑。不仅会浪费了时间和精力,可能会导致以下问题:可读性差维护困难变更历史不......
  • 04-共阳数码管的动态显示
    共阳数码管的动态显示代码如下:#include<REGX52.H>voidDisplay_Dynamic();unsignedcharmonth=1;voidDelay_ms(unsignedintxms){ unsignedinti,j; for(i=0;i<xms;i++){ for(j=0;j<299;j++); }}voidDelay(unsignedchart){ while(t--){ //......
  • 小林图解网络-基础篇
    2.1TCP\IP有哪几层TCP、IP协议栈主要有应用层、传输层、网络层它们的功能作用、拥有哪些协议?应用层主要为用户提供服务,完成特定的功能。场景的协议有HTTP、FTP、DNS传输层主要提供应用进程之间的通信,以端口标识应用主要协议有TCP、UDP协议UDP提供不可靠、无连接的数据传输......
  • 2017 China Collegiate Programming Contest Final (CCPC-Final 2017)
    Preface今天打学校统一要求的这场CCPC2017Final,直接被打爆了,各种数学题搞得人生活不能自理主要是H徐神开场就秒出了正确的思路,然后一心认准高斯消元然后一直想+写+调到结束都没卡过去比赛最后20min的时候祁神想到了更好写的基于施密特正交化的方法,可以碍于时间有限没调出来不......
  • [题解] CF632F - Swimmers in the Pool
    CF632F-SwimmersinthePool题目传送门题意给定一个大小为\(n\timesn\)的矩阵\(A\)。假设\(A\)满足以下条件,那么称该矩阵为MAGIC,否则为NOTMAGIC,并输出对应的属性(即\(A\)是MAGIC还是NOTMAGIC)。$A_{i,j}=A_{j,i}$;$A_{i,i}=0$;$A_{i,j}\le......
  • Depth Camera-based 3D Modeling
    基于深度相机的3D建模受到夏同学和王希同学的启发,我这几天看了下深度相机这一块,用于三维重建三维重建的pipeline是:深度图采集(主动式和被动式)->深度图预处理(噪音)->场景表示(立体/表面表示)->深度图像融合(相邻帧,涉及到点对匹配和位姿联合优化)->纹理重建。trade-offs有:基于体素的......