如何把一个数组循环右移K位

1.题目描述

把数组序列[1,2,3,4,5,6,7,8]右移两位变为[7, 8, 1, 2, 3, 4, 5, 6]

2.解题分析

首先将数组分为两段数组序列:

[1, 2, 3, 4, 5, 6]

[7, 8]

  1. 首先先将第一段数组序列反转

    [6,5,4,3,2,1,7,8]

  2. 再将第二段数组序列反转

    [6,5,4,3,2,1,8, 7]

  3. 再将整个数组反转即得到结果

    [7, 8, 1, 2, 3, 4, 5, 6]

3.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.Arrays;

public class 如何把一个数组循环右移K{
public static void reverse(int[]a ,int begin,int end){
while(begin<end){
int tmp=a[begin];
a[begin]=a[end];
a[end]=tmp;
begin++;
end--;
}
}
public static void shiftK(int[]a,int k){
int n=a.length;
k=k%n;
reverse(a, n-k, n-1);
reverse(a,0,n-k-1);
reverse(a,0,n-1);

}
public static void main(String[] args) {
int []a=new int[]{1,2,3,4,5,6,7,8};
System.out.println(Arrays.toString(a));
shiftK(a, 2);
System.out.println(Arrays.toString(a));
}

}
-------------本文结束感谢您的阅读-------------
0%