gpt4 book ai didi

java - Java中的数组一维右旋

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:09:21 25 4
gpt4 key购买 nike

我希望将数组的元素向右旋转 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com