轮转数组(力扣189)
创始人
2024-06-02 01:31:17

轮转数组

题目描述:

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

方法一:重新插入法

通过观察,我们可以先创建一个新数组,将原数组的元素轮转k位后放入新数组对应的位置,将所有元组放完后,再将新数组的元素覆盖给原数组即可,但是如果k很大,我们就要轮转好多次,所以我们可以取模,轮转最少次数。

 

代码实现:

    public void rotate(int[] nums, int k) {int n = nums.length;int[] arr = new int[n];for (int i = 0; i < n; i++) {arr[(i+k)%n] = nums[i];}for (int i = 0; i < n; i++) {nums[i] = arr[i];}}

方法二:反转数组法

此方法是解决这类问题常用的一种方法,比较节省空间,不用创建新数组,将数组反转三次,即可完成数组轮转。

 

代码实现:

    public void rotate1(int[] nums, int k) {int n = k % nums.length;reversal(nums,0,nums.length-1);reversal(nums,0,n-1);reversal(nums,n,nums.length-1);}public static void reversal(int[] arr,int l,int r){while (l < r){int temp = arr[l];arr[l] = arr[r];arr[r] = temp;l++;r--;}}

相关内容

热门资讯

中力股份(603194.SH)... 格隆汇1月13日丨中力股份(603194.SH)公布,公司近日收到股东湖州中提升企业管理合伙企业(有...
社保卡长期未激活,影响使用吗? 转自:北京日报客户端社保卡主要有两方面功能社会保障功能和金融功能身份凭证、就医购药、自助查询等属于社...
三维天地:目前经营情况正常 不... 每经AI快讯,1月13日,三维天地(301159.SZ)公告称,公司股票交易连续3个交易日收盘价格涨...
上海发布28条新政促销费,战略... 上海2025年前三季度服务业增加值增长5.9%,1~11月社会消费品零售总额增长5%,均高于全国水平...
国产明星创新药出海又“爆了”   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! (来源:界面新闻)最...