栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Leetode 189.旋转数组【Java】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetode 189.旋转数组【Java】

目录
  • 1.题目
  • 2.解题思路
    • 使用一个变量temp暂存
    • 使用额外的数组
    • 翻转数组
  • 3.Java代码


1.题目

给定一个数组,将数组中的元素向右移动 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 <= 2 * 104
    -231 <= nums[i] <= 231 - 1
    0 <= k <= 105

2.解题思路 使用一个变量temp暂存

将数组中最后一个元素暂存在一个变量temp中,数组中其余元素均向后移1,此时数组中num[0]空闲,使其等于缓存在temp中的值。有题目得该数组中的元素向右移k个位置,因此此过程重复k次。

使用额外的数组

数组移动过程中,若nums[i]向右移k个位置,则移动结束后,它应该在nums[(i+k)%nums.length]。使用额外的数组,要让新数组长度与原数组相等且为空,将nums[i]位置的元素放在新数组下标为 (i+k)%nums.length 的位置。一系列操作之后,新数组便是题目所需要的结果。

翻转数组

由题意可知,当数组旋转之后,后面的一部分元素便会到前面。此时我们可以进行数组翻转(其实就是把数组逆序排列一边),又由于题中说元素向右移动k个位置,则使第一次翻转后的数组的前k个元素为一组,其余后面的元素为一组,分别再进行反转,便可得到所求结果
eg.

3.Java代码
  1. 最容易想到的一种,但是会超出时间限制。
class Solution {
    public void rotate(int[] nums, int k) {
       while(k>0){
           int temp=nums[nums.length-1];
           for(int i=nums.length-1;i>0;i--){
               nums[i]=nums[i-1];
           }
           nums[0]=temp;
           k--;
       }
    }
}

  1. 使用额外的数组
class Solution {
    public void rotate(int[] nums, int k) {
        int length=nums.length;
        int[] arr=new int[length];   //使用与原数组等长的一个额外的数组
       
       for(int i=0;i 

  1. 翻转数组
class Solution {
    public void rotate(int[] nums, int k) {
        k%=nums.length;
        re(nums,0,nums.length-1);  //先将整个数组进行翻转
        re(nums,0,k-1);            //前k个元素进行翻转
        re(nums,k,nums.length-1);  //后面其余元素再进行一次翻转

    }
    public void re(int[] nums,int left,int right){    //翻转的过程
        while(left 


来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/rotate-array
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340111.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号