-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrotateArray.java
92 lines (63 loc) · 1.71 KB
/
rotateArray.java
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import java.util.Arrays;
import java.lang.IllegalArgumentException;
public class rotateArray{
//o(n) space
public static void rotate(int[] arr, int k){
if(arr == null || k < 0)
throw new IllegalArgumentException("check arguments");
int n = arr.length;
if( k> n)
k = k % n;
int[] result = new int[n];
for(int i = 0; i < k; i++)
result[i] = arr[n - k + i];
int j = 0;
for(int i=k; i < n; i++)
result[i] = arr[j++];
System.arraycopy(result, 0, arr, 0, n);
}
public static void bubbleRotate(int[] arr, int k){
if(arr == null || k < 0)
throw new IllegalArgumentException("check arguments");
int n = arr.length;
if( k>n)
k = k % n;
for(int i=0; i < k; i++){
for(int j=n-1; j > 0; j--){
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
public static void reverseRotate(int[] arr, int k){
if(arr == null || k <0)
throw new IllegalArgumentException("check arguments");
int n = arr.length;
if(k>n);
k = k % n;
int lengthOfFirstPart = n - k;
reverse_helper(arr, 0, lengthOfFirstPart-1);
reverse_helper(arr, lengthOfFirstPart, n-1);
reverse_helper(arr, 0, n-1);
}
public static void reverse_helper(int[] arr, int left, int right){
if(arr == null || arr.length == 1)
return;
while(left<right){
int temp = arr[left];
arr[left++] = arr[right];
arr[right--] = temp;
}
}
public static void main(String[] args){
int[] a = {1,5,7,9,11};
rotate(a,6);
System.out.println("arraycopy rotate: "+Arrays.toString(a));
bubbleRotate(a,2);
System.out.println("bubbleRotate :"+Arrays.toString(a));
int[] a2 = {1,2,3,4,5,6};
reverseRotate(a2,2);
System.out.println("reverseRotate: "+Arrays.toString(a2));
}
}