【数据结构】Leetcode旋转数组

news/2025/1/11 2:15:00/

目录

          一、题目说明

          二、题目解析


一、题目说明

题目链接:leetcode旋转数组

给你一个数组,将数组中的元素向右轮转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:

首先要创建一个临时数组tmp[ ] 

第一步:先将后k个数字拷贝到前面;

第二步:在将前n-k个数字拷贝到后面;

第三步:最后将临时数组里面的元素拷贝回去。

注意:为了保证逆置的次数k小于数组的大小,要在开头的位置先模等一下数组的大小。

void rotate(int* nums, int numsSize, int k) 
{k %= numsSize;//变长数组int tmp[numsSize];//后k个拷贝前面int j = 0;for (int i = numsSize - k; i < numsSize; ++i){tmp[j] = nums[i];++j;}//前n-k个拷贝后面for (int i = 0; i < numsSize - k; ++i){tmp[j] = nums[i];++j;}//拷贝回去for (int i = 0; i < numsSize; ++i){nums[i] = tmp[i];}
}

时间复杂度为:O(N)。

方法2:

这种方法比较简单巧妙,但是先要自己编写一个逆置函数,

第一步:逆置前n-k个数字;

第二步:逆置后k个数字;

第三步:整体逆置。

注意:为了保证逆置的次数k小于数组的大小,要在开头的位置先模等一下数组的大小。

void reverse(int* nums, int begin, int end)
{while (begin < end){int tmp = nums[begin];nums[begin] = nums[end];nums[end] = tmp;begin++;end--;}
}
void rotate(int* nums, int numsSize, int k) 
{k %= numsSize;reverse(nums, 0, numsSize - 1);reverse(nums, 0, k - 1);reverse(nums, k, numsSize - 1);
}

 时间复杂度为:O(N)。


本文提供了两种方法,应该还有其他的最优解,欢迎大家在下面评论,互相帮助共同提高。

本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。

  老铁们,记着点赞加关注哦!!!


http://www.ppmy.cn/news/7286.html

相关文章

掌握这17张图,没人比你更懂RecyclerView的预加载

回顾上一篇文章&#xff0c;我们为了减少描述问题的维度&#xff0c;于演示之前附加了许多限制条件&#xff0c;比如禁用了RecyclerView的预拉取机制。 实际上&#xff0c;预拉取(prefetch)机制作为RecyclerView的重要特性之一&#xff0c;常常与缓存复用机制一起配合使用、共…

FlinkSql开窗实例:消费kafka写入文本

前言 以前写Flink从kafka入hdfs因为业务需求和老版本缘故都是自定义BucketSink入动态目录中&#xff0c;对于简单的需求可以直接用Flink SQL API进行输出。Flink版本1.13.1。 Flink官网示例 准备 本地下载个kafka&#xff08;单机即可&#xff09;&#xff0c;新建个桌面目…

分享过几个【贪吃蛇】了,再分享一下也不过分吧?(妙趣横生)

贪吃蛇嘻嘻 之前分享过的在这儿: 【贪吃蛇-----html实现(附源代码)】

JavaScript之“+“、“!“、“!!“、“!!+“写法使用说明

目录 1、"" 的使用 2、"!" 的使用 3、"!!" 的使用 4、"!!" 的使用 项目实际所用 &#xff1a; JavaScript 类型转换之高阶写法 "!!" 1、"" 的使用 " " 能将 字符串数字 直接转为 number 类型 &a…

SpringCloud-Gateway配置及持久化、过滤器、异常处理

文章目录yml配置代码配置持久化数据结构predicates(断言) 和filters&#xff08;过滤&#xff09;新增配置说明相关接口全局过滤器局部过滤器全局异常处理gateway不能和web一起使用 需要排除掉<dependency><groupId>org.springframework.cloud</groupId><…

加速度计和陀螺仪模型(imu元件)分析

** 一、先分析加速度 ** 1、3自由度&#xff1a;3个轴方向的加速度/力的模型很好理解&#xff0c;前后X&#xff0c;左右Y&#xff0c;上下Z&#xff1b; 2、3自由度: 沿前后轴X方向的滚动&#xff0c;左右轴Y方向的俯仰&#xff0c;上下轴Z方向的偏航&#xff1b; 这三个自由…

RabbitMQ 订阅模型-路由模式

订阅模型-路由模式&#xff0c;此时生产者发送消息时需要指定 RoutingKey&#xff0c;即路由 Key&#xff0c;Exchange 接收到消息时转发到与 RoutingKey 相匹配的队列中。 在 Direct 模型下&#xff1a; 队列与交换机绑定&#xff0c;不能任意绑定&#xff0c;而要指定一个 Ro…

RocketMQ原理篇

文章目录broker与NameServerMessageQueue与Topic的关系生产者、消费者写入读取 消息CommitLog生产者消费者组broker与NameServer 基于 Dledger 实现 RocketMQ 高可用自动切换 broker 会每隔 30 秒向 NameServer 发送一个的心跳 &#xff0c;NameServer 收到一个心跳 会更新对…