java - Java中的数组一维右旋

标签 java arrays

我希望将数组的元素向右旋转 k 次(其中 k 是一个 int),数组的大小为 n(int n),你可以在下面看到我的代码,我不确定当 array[n+k] 命中 a[n-1] 时如何处理

我试图将 a[n-1] 环绕成 a[0],然后根据需要继续旋转。我知道其他人已经以不同的方式解决了这个问题,但我想问的是利用我的代码并调整它的工作方式。

我的代码:

package com.company;
//Make an array that rotates n members k times
import java.util.Scanner;
import java.util.Arrays;
public class RightRotationArray {
    public static void main(String[] args) {
        //I want an array with a size n
        int n;
        int k;
        Scanner input = new Scanner(System.in);
        System.out.print("Enter a size for the array: ");
        n= input.nextInt();
        System.out.print("Enter in a shift to the array: ");
        k= input.nextInt();
        //Declare the array
        int[] array1= new int[n];
        //now input elements into the array
        for(int i=0; i< n; i++){
            System.out.print("Enter in a value: ");
            array1[i]= input.nextInt();
            //want to make the array right rotate so everyone is shifted right
            for(int a= 0; a<n-1; a++){
                array1[a]= array1[a+k];//shifting step
                //need an if to catch the above size declaration
                if(array1[a+k]== array1[n-1]){
                    array1[n-1] = array1[0];

                }
            }
        }
        //print out the array to verify
        System.out.println(Arrays.toString(array1));
    }

}

最佳答案

import java.util.Arrays;

public class ShiftArray {

    public final static void main(String[] args) {
        int steps = 5;
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        rotateArray(array, steps);
        Arrays.stream(array)
            .forEach(System.out::println);

        // alternate approach doing the shifring while filling:

        array = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int[] newArray = new int[array.length];
        for (int i = 0; i < newArray.length; i++) {
            int index = (i + steps) % newArray.length;
            newArray[index] = array[i];
        }

        System.out.println("================");

        Arrays.stream(newArray)
        .forEach(System.out::println);

    }

    public static void rotateArray(int[] array, int steps) {
        int[] tempArray = new int[steps];
        System.arraycopy(array, array.length - steps, tempArray, 0, steps);
        for (int i = array.length - steps - 1; i >= 0; i--) {
            array[i + steps] = array[i];
        }
        System.arraycopy(tempArray, 0, array, 0, steps);
    }

}

根据数组的大小和 steps 的值,第一个解决方案可能会导致内存问题。

关于java - Java中的数组一维右旋,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48172535/

相关文章:

java - 如何使用java类在jsp页面中显示数据库中的值?

ruby-on-rails - Rails 4.1 Postgres 字符串数组 : Can't Save After Modifying

linq - LINQ for LIKE查询数组元素

c++ - 如何在没有内存操作的情况下在 C++ 和 STL 中定义二维数组?

java - JSF,将空值注册到绑定(bind)实例

java - 递归函数可以在函数的原始调用中更改变量吗?

java - 如何从struts bean中获取值?

java - 使用 LDAP/Java 启用 Active Directory 用户

javascript - 如何在 'N/search'模块过滤器中添加带括号的过滤条件

javascript - 按元素分块数组