多益网络校招

原题链接:
https://leetcode.cn/problems/rotate-array/

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
/**
三次翻转
1. 全数组翻转 这样尾部的k%mod个数就会移动到队首
2. 然后再将首部k%mod - 1 和 k%mod,n - 1的数分别翻转就能得到答案
*/
class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
k = k % n;
// 整体翻转
reverse(0,n - 1,nums);
// 翻转(0,k%n - 1)
reverse(0,k - 1,nums);
// 翻转(k%n,n - 1)
reverse(k,n - 1,nums);
}

private void reverse(int start,int end,int [] q){
while(start < end){
int t = q[start];
q[start] = q[end];
q[end] = t;
start++;
end--;
}
}
}

由于 多益网络要求的是ACM的形式 格式再附上ACM格式的代码:

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
29
30
31
32
import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
k = k % n;
int [] q = new int [n];
for (int i = 0 ; i < n ; i++){
q[i] = sc.nextInt();
}

reverse(0,n - 1,q);
reverse(0, k - 1,q);
reverse(k,n - 1 ,q);

Arrays.stream(q).forEach(e-> System.out.printf("%d ",e));

}

private static void reverse(int start,int end,int [] q){
while (start < end){
int t = q[start];
q[start] = q[end];
q[end] = t;
start++;
end--;
}
}
}