【Leetcode数据结构算法题】轮转数组(顺序表篇)

本文详细解析LeetCode上关于轮转数组的算法问题,涵盖三种解题方法:k次轮转法、临时数组法和三步翻转法。通过实例和图解,阐述每种方法的思路和实现,旨在帮助读者理解并优化算法效率。
摘要由CSDN通过智能技术生成

题目内容:

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

在这里插入图片描述
leetcode题目链接(点击即可跳转)


思路分析

看完题目后,我们首先要做的就是理解题目的含义,也就是审题。从不同维度,不同角度的去设问题并主动回答这些问题。题目中出现了一个我们比较陌生的词语“轮转”,可能我们一下子无法理解这个词是啥子玩意儿。这个时候就可以借助题目中的示例来帮助理解。比如说示例1:
在这里插入图片描述
用通俗的话来说就是,向右轮转1步,就是将最后一个元素放到第一个位置,其余元素位置向右移动一个位置。类似于所有元素向右滑动一个位置,只不过最后一个元素向右滑动的时候需要回到第一个位置。
在这里插入图片描述
理解了“轮转”的含义后,为了更好的理解题目的要求和隐藏含义,我们需要从以下几个角度进行自我设问:
(1)题目中给的数组有告诉我们数组的长度能否为0?
(2)向右轮转k次的k的实际取值如何,能不能为0?能不能超过数组本身的长度?
关于(1)(2)这两个问题,我们可以看题目的提示部分:
在这里插入图片描述
根据提示的内容我们可以清楚的知道,数组的长度至少为1,不能为0。这就解决了问题(1)。另外k的取值范围是0到10^5,虽然没有直接表明k与数组长度之间的关系,但是我们可以猜测,k的大小可以超过数组的长度。也就是说k可以等于0,可以超过数组本身的长度(可以一直向右转啊转),这就解决了问题(2)。这两个问题想清楚后,就可以进行相应的算法分析和设计了。


方法一:k次轮转法

这个方法其实可以通过题目给的示例直接想到。
为了简化问题,我们可以让k先为1,这样就是向右轮转一步。
如果k=2,那么先向右轮转一步,再向右轮转一步。
如果k=3…(套娃套娃再套娃)
另外,当k的大小超过数组的长度时,比如数组长度为5,k=6,这时候向右进行k次轮转,相当于前面5次轮转白做了,只进行了最后1次轮转,因为轮转6次和轮转1次的效果是一样的。所以实际的轮转效果应该为 k=k%(数组的长度)。(这里的轮转效果就是相当于轮转多少次…我随便创造的词方便理解…看不懂也没关系…)

算法图解

在这里插入图片描述


函数接口实现

void rotate(int* nums, int numsSize, int k){
   
    //求出实际轮转效果
    k = k % numsSize;
    //k为多少,就向右轮转多少次
    for(int i = 
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大家好我叫张同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值