【LeetCode】189. 轮转数组

news2024/12/23 8:19:51

题目链接:https://leetcode.cn/problems/rotate-array/

📕题目要求:

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

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


🧠解题思路

方案一:暴力求解

旋转k次,一次旋转一个。每次将最右边的数字保存一下,然后依次将剩余的元素进行右移,最后将保存的数字添加到最左侧即可。

时间复杂度最坏为:O(N^2)

空间复杂度为:O(1)

此方法效率过低,这里就不进行赘述。

方案二:三段逆置

先将前n-k个元素进行逆置,再将后k个元素进行逆置,最后将数组整体逆置。

时间复杂度为:O(N)

空间复杂度为:O(1)

方案三:空间换时间

另外开辟一段空间tmp,将nums数组中后k个元素先拷贝到tmp,再将num数组中前n-k个元素拷贝到tmp中。最后将tmp中的元素拷贝覆盖到nums中,销毁tmp,返回nums。


🍭代码示例

方案二代码示例如下:

void reverse(int* nums,int left,int right)
{
    while(left<right)
    {
        int tmp = nums[left];
        nums[left]=nums[right];
        nums[right]=tmp;
        left++;
        right--;
    }
}

void rotate(int* nums, int numsSize, int k)
{
    if(k>=numsSize)
    {
        k%=numsSize;
    }
    reverse(nums,0,numsSize-k-1);
    reverse(nums,numsSize-k,numsSize-1);
    reverse(nums,0,numsSize-1);
    return nums;
}

方案三代码示例如下:

void rotate(int* nums, int numsSize, int k)
{
    if(k>numsSize)
    {
        k%=numsSize;
    }
    int i = 0;
    int* tmp =(int*)malloc(sizeof(int)*numsSize);
    memcpy(tmp,nums+numsSize-k,sizeof(int)*k);
    memcpy(tmp+k,nums,sizeof(int)*(numsSize-k));
    memcpy(nums,tmp,sizeof(int)*numsSize);
    return nums;
}

在进入数据结构部分,我还是建议大家可以试试画图理解比较有用,我今后也会可以去训练这部分的能力。


这就是我对本题的理解,如果大家有更优的解,欢迎交流,一起进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/466485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MTC-PD65W1C-CTA1快充电源-使用MTC-650V Cascode D-GaN

本电源模块是65W单一C界面&#xff0c;其输出电压由协议IC可以控制5V/3A, 9V/3A, 15V/3A, 20V/3.25A等电压输出&#xff0c;使用QR/DCM反驰式电路架构于输出20V重载时可达93%效率及功率密度可达1.5W/cm3&#xff0c;本系统采用同系列控制单晶片&#xff1a;QR一次侧控制IC驱动M…

【云计算•云原生】3.一小时熟练掌握docker容器

文章目录 docker简介ubuntu下安装dockerkali下安装dockerdocker基本命令docker搭建mysql、nginx、redis容器/镜像打包搭建私有镜像仓库docker网络管理Dockerfile文件docker-compose.yml示例&#xff1a;搭建lamp docker简介 docker是一个开源的应用容器引擎&#xff0c;可以让…

软件著作权登记版权保护中心下发补正修改指南

本文为大家介绍常见版权中心下发的补正问题及对应修改方法。 一、补正是什么意思&#xff1f; 补正&#xff0c;即增补订正。 下发补正指版权保护中心发现软件著作权登记材料中存在一些格式/内容上的问题&#xff0c;予以驳回。要求著作权人或代理人依照补正意见内容对材料进…

电影《灌篮高手》观后

上周和同学一起看了电影《灌篮高手》这部电影&#xff0c;个人以前没有看过相关漫画和动画&#xff0c;但记得&#xff0c;看过海报和一些宣传物品&#xff0c;有的衣服上&#xff0c;有文具盒上&#xff0c;也都出现过&#xff0c;而且是在自己小时候&#xff0c;可见当时的影…

(中)苹果有开源,但又怎样呢?

上篇&#xff08;详情请戳&#xff1a;《&#xff08;上&#xff09;苹果有开源&#xff0c;但又怎样呢&#xff1f; 》&#xff09;里说到&#xff0c;苹果首个开源项目 Darwin 的诞生&#xff0c;与乔布斯的复仇归来有着千丝万缕的关系。 作为一个开源的操作系统&#xff0c…

【JAVA】将两个字符串相乘并返回字符串

&#x1f58a;作者 : D. Star. &#x1f4d8;专栏 : Java &#x1f606;今日分享 : 越忙越不能熬夜. —晚安 , 好梦. 将两个字符串相乘并返回字符串 &#x1f33b;前言:✔题目:&#x1f50e;代码详情:1.创建字符创对象:2.将字符串转化为数字:3.数字相乘,并转化为字符串家人们,点…

[C++]——C++基础知识点(C++和C语言的区别)

文章目录 1. 前言2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C的输入输出4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载5.1 函数重载概念5.2 C支持函数重载的原理——名字修饰 6. 引用6.1 引用概念6.2 引用特性6.3 常引用6.4 引用的使用场景6.5 引用和指针的…

招商基金数字化转型下的研发管理|ONES 客户案例

在 4 月 20 日举行的《中国企业软件研发管理白皮书》发布会上&#xff0c;招商基金信息技术部副总监、研发中心主管刘志昆作了《招商基金数字化转型下的研发管理》主题演讲&#xff0c;从数字化转型背景、研发管理所遇到的挑战出发&#xff0c;讲述招商基金如何摸索出适合自身环…

Pycharm连接MySQL

使用MySQL内置工具&#xff08;命令&#xff09; 创建数据库&#xff1a;unicom 数据表&#xff1a;admin 表名&#xff1a;admin 列&#xff1a;id 整型 自增 主键username 字符串 不为空&#xff0c;password 字符串 不为空&#xff0c;mobile 字符串 不为空 Python代码实…

echarts 象形柱图_矢量图_自定义样式

Echarts 常用各类图表模板配置 注意&#xff1a; 这里主要就是基于各类图表&#xff0c;更多的使用 Echarts 的各类配置项&#xff1b; 以下代码都可以复制到 Echarts 官网&#xff0c;直接预览&#xff1b; 图标模板目录 Echarts 常用各类图表模板配置一、象形柱图二、环形图…

电脑中了勒索病毒,Windows操作系统如何设置才能预防faust勒索病毒攻击?

随着计算机技术的不断发展&#xff0c;勒索病毒的加密程序也有了很大提升&#xff0c;phobos勒索家族也衍生出了各种后缀的勒索病毒&#xff0c;给我们的日常工作生活带来了很大困扰。随着phobos勒索家族的加密程序升级&#xff0c;faust勒索病毒已经成为该家族中较为疯狂的勒索…

BACnet IP通讯方式组网步骤

BACnet IP通讯方式组网步骤 文章目录 BACnet IP通讯方式组网步骤前言一、配置BACnet IP网络参数二、确定DDC控制器和扩展模块的BACnet地址三、配置BACnet对象&#xff1a;四、配置DDC控制器和扩展模块五、测试通信六、实现控制功能七、总结 前言 BACnet IP方式组网的几个优势&…

强烈建议互联网人转战实体和农业,去了就是降维打击!实体太缺人才了,老板也不缺钱!...

大环境不好&#xff0c;互联网人该何去何从&#xff1f; 一位网友提出了一个新思路&#xff1a;强烈建议互联网同学转战实体、农业这些行业。实体真的太缺人才了&#xff0c;目前大部分实体都留下70后、80后在继续奋斗。其实实体老板很多都不缺钱&#xff0c;经过多年积累&…

内外部函数和内存模型

1、函数&#xff08;封装、复用&#xff09; 功能性&#xff1a;最基本的特性&#xff1b; 扩展性&#xff1a;对于时刻变化的需求易于扩展&#xff1b; 维护性&#xff1a;对于时刻变化的需求易于维护&#xff0c;易于编码变更&#xff1b; 封装性&#xff1a;不要把所有的代…

sql优化慢查询

1.慢查询设置 慢查询设置&#xff08;临时&#xff09; -- 查看是否开启了慢查询日志 show variables like slow%;-- 开启慢查询日志 set global slow_query_log on;-- 更改日志路径 set global slow_query_log_file /data/mydata/app1-slow.log;-- 查看慢查询时间临界值&…

学习笔记-主成分分析法

定义 主成分分析是一种降维算法&#xff0c;它能将多个指标转换为少数几个主成分&#xff0c;这些主成分是原始变量的线性组合&#xff0c;且彼此之间互不相关&#xff0c;其能反映出原始数据的大部分信息。一般来说&#xff0c;当研究的问题涉及到多变量且变量之间存…

synchronize锁详解

目录 1、什么是synchronize&#xff1f; 2、为什么要用synchronize锁&#xff1f; 2.1 代码演示 2.2 原因分析 2.3 专有名词解释 2.3.1 临界资源 2.3.2 临界区 2.3.3 竞态条件 3、synchronize锁的原理 3.1 锁升级过程 3.1.1 偏向锁 3.1.2 轻量级锁 3.1.3 重量级锁…

【设计模式】七大设计原则--------单一职责原则

文章目录 1.案例1.1 原始案例1.2 改进一&#xff1a;类上遵循单一职责原则1.3 改进二&#xff1a;方法上遵循单一职责原则 2.小结 1.案例 1.1 原始案例 package com.sdnu.principle.singleresponsibility; //客户端 public class singleResponsibility {public static void m…

选择什么电容笔比较好?平价好用的iPad电容笔推荐

科学技术的迅速发展使人们的生活发生了巨大的变化。如今&#xff0c;众多的电子和数码产品层出不穷&#xff0c;而这种能够与平板电脑配套的电容笔也是如此。随着电容笔的不断发展&#xff0c;其应用范围也将不断扩大&#xff0c;今天&#xff0c;我将向大家推荐一些具有较高性…

总结:一文搞懂chatGPT原理

目前关于chatGPT的资料过于零散&#xff0c;没有详尽所有知识点、系统概述的文章&#xff0c;因此&#xff0c;笔者作了这篇总结性文章。 训练过程总览 理清演化路径 预训练(pretrain) GPT-3概述 GPT 3模型的理念 GPT-3如何学习 数据集 指令微调 (Instruction Fine-Tunin…