首页 > 编程语言 >轮转数组的Java实现

轮转数组的Java实现

时间:2024-08-02 09:55:32浏览次数:10  
标签:轮转 arr1 nums int arr2 数组 Java

轮转数组

  1. 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
输入: 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]
  1. 解法1:把数组看成一个队列,每一轮相当于取出队尾元素后,其他元素向后移动一位,然后队尾元素插入队头完成,循环k次即可达到效果。当输入数组元素过多时,会有超时的风险。
class Solution {
    public void rotate(int[] nums, int k) {
        for (int i=0;i<k;i++) {
            forward(nums);
        }
    }    

    private void forward(int[] nums) {
        int n = nums.length;
        int a = nums[n-1];
        for (int i=n-1;i>0;i--) {
            nums[i] = nums[i-1];
        }
        nums[0] = a;
    }
}
  1. 解法2:数组进行分段,长度为n的数组分割成长度为n-k的数组arr1和k的数组arr2,然后拼接数组arr2和arr1得到结果,当k大于n时,只需要转动k%n次即可,当k%n为0时不需要转动。
class Solution {
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        if (k > n) {
            k %= n;
        }
        
        if (k < n) {
            int[] arr1 = new int[k];
            int[] arr2 = new int[n-k];
            System.arraycopy(nums, n-k, arr1, 0, k);
            System.arraycopy(nums, 0, arr2, 0, n-k);
            for (int i=0;i<k;i++) {
                nums[i] = arr1[i];
            }
            
            for (int i=0;i<n-k;i++) {
                nums[k+i] = arr2[i];
            }
        }
    }
}

标签:轮转,arr1,nums,int,arr2,数组,Java
From: https://blog.csdn.net/dolly_baby/article/details/140864591

相关文章

  • Java毕业设计-基于springboot开发的智能学习平台系统-毕业论文(附毕设源代码)
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求/流程分析3、系统功能结构三、系统实现展示1、学生信息管理2、课程信息管理3/试卷信息管理4/公告信息管理四、毕设内容和源代码获取总结逃逸的卡路里博主介绍:✌️码农一枚|毕设布道师......
  • 深入理解PHP数组反转的算法
    本文由ChatMoney团队出品在PHP开发中,数组反转是一个常见的操作,它涉及到将数组的键值对或者键的顺序进行倒序排列。本文将深入探讨PHP数组反转的算法,并提供相应的代码示例。一、PHP数组反转基础在PHP中,数组反转通常涉及到两个函数:array_reverse()和array_flip()。......
  • Java面试题:请问接口与抽象类有何区别?
    引言在OOD(面向对象设计)中,经常会用到抽象类或接口。而在使用过程中,也许会有不少人认为接口和抽象类差不多,然后就想当然地觉得可以相互替换。事实上,虽然他们有很多相似点,但也有很大差异。面试官通常会问你他们到底有哪些差异,以考察你的面向对象功力够不够。下面我就从三个层面谈......
  • 对于PHP数组反转的算法的深度理解
    本文由ChatMoney团队出品在PHP开发中,数组反转是一个常见的操作,它涉及到将数组的键值对或者键的顺序进行倒序排列。本文将深入探讨PHP数组反转的算法,并提供相应的代码示例。一、PHP数组反转基础在PHP中,数组反转通常涉及到两个函数:array_reverse()和array_flip()。......
  • java笔记3
    6.类与对象面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。对象可以包含数据和代码,它们是现实世界中某些事物的抽象。面向对象与面向过程面向过程编程:关注于动作和步骤,将程序分解为一系列的过程或函数。面向对象编程:关注于数据和对象,将程序构建为交互的对象集合。......
  • Java流程控制语句结构中的循环结构
    循环结构目录循环结构while循环do...while循环for循环如果您想要同样的操作执行多次,就需要使用循环结构。Java中有三种主要的循环结构:while循环do…while循环for循环while循环while是最基本的循环,它的结构为:while(布尔表达式){//循环内容}只要布尔表达式......
  • Java 抽象类
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。......
  • Java编译和运行的命令
    1.3Java编译和运行的命令目录1.3Java编译和运行的命令1.3.1Java编译和运行的基础概念1.3.2基本步骤1.编译Java代码2.运行编译后的代码1.3.3详细解释1.3.4常见问题1.3.5常用Java命令javacjavajar1.3.1Java编译和运行的基础概念源代码文件(.java):这是你写的Java代......
  • Java跨平台原理
    1.4Java跨平台原理由源文件(.java)--->字节码文件(.class)(二进制文件)----->解释---->Unix,Win,Linux等机器。一次编译,到处运行编译器的作用:将源文件编译成class文件虚拟机的作用:将字节码文件解释成对应平台机器码并执行。java可以实现跨所有的平台?只有提供并且......
  • 合并数组操作:现有如下一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} 要求
    思路:确定出不为0的个数,这样可以开辟新数组;从旧的数组之中,取出内容,并将其赋给新开辟的数组。如果判断到0,就使用continue关键字。注意,合并成一个新的小数组后,i和j不能同步遍历,当continue跳过旧数组0的遍历后,j不跟随i++的增加而变化,而是把j++放程序的最下面,每遍历一个不为0的......