-
-
Notifications
You must be signed in to change notification settings - Fork 223
Expand file tree
/
Copy pathrotateArray.js
More file actions
109 lines (90 loc) · 3.09 KB
/
rotateArray.js
File metadata and controls
109 lines (90 loc) · 3.09 KB
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// 1. Rotate Array in right direction Using Reversal Algorithm (Efficient O(n) time, O(1) space)
function rotate(nums, n) {
const length = nums.length;
if (length === 0 || n % length === 0) return nums; // No rotation needed
n = n % length; // Handle n > length
// Reverse entire array
reverse(nums, 0, length - 1);
// Reverse first part
reverse(nums, 0, n - 1);
// Reverse second part
reverse(nums, n, length - 1);
return nums;
}
// Helper function to reverse elements between two indices
function reverse(arr, start, end) {
while (start < end) {
[arr[start], arr[end]] = [arr[end], arr[start]];
start++;
end--;
}
}
//2.Using additional array and arithmetic operation: TC:O(n), SC:O(n)
function rotateUsingArray(nums, n) {
const length = nums.length;
const resultArray = Array(nums);
for(let i = 0; i < length; i++) {
resultArray[(i+n)%length] = nums[i];
}
}
// 3. Rotate Array Using Brute Force with pop() and unshift() (Inefficient: O(n^2) time), SC: O(1)
function rotateBruteForce(nums, n) {
const length = nums.length;
if (length === 0) return;
n = n % length;
for (let i = 0; i < n; i++) {
nums.unshift(nums.pop());
}
}
// 4. Rotate Array in left direction Using Reversal Algorithm (Efficient O(n) time, O(1) space)
function rotateLeft(nums, n) {
const length = nums.length;
if (length === 0 || n % length === 0) return nums; // No rotation needed
n = n % length; // Handle n > length
// Reverse first part
reverse(nums, 0, n - 1);
// Reverse second part
reverse(nums, n, length - 1);
// Reverse entire array
reverse(nums, 0, length - 1);
return nums;
}
//5.Using additional array and arithmetic operation: TC:O(n), SC:O(n)
function rotateLeftUsingArray(nums, n) {
const length = nums.length;
const resultArray = Array(nums);
for(let i = 0; i < length; i++) {
resultArray[(i-n+length)%length] = nums[i];
}
}
// 6. Rotate Array left Using Brute Force with shift() and push() (Inefficient: O(n^2) time), SC: O(1)
function rotateBruteForceLeft(nums, n) {
const length = nums.length;
if (length === 0) return;
n = n % length;
for (let i = 0; i < n; i++) {
nums.push(nums.shift());
}
}
// ----------------------------
// Test Cases
// ----------------------------
let rotate1 = [1, 2, 3, 4, 5, 6, 7];
console.log("Before rotate (reversal):", [...rotate1]);
rotate(rotate1, 4);
console.log("After rotate (reversal):", rotate1);
rotateLeft(rotate1, 4);
console.log("After left rotate (reversal):", rotate1);
let rotate2 = [-10, 4, 5, -1];
console.log("Before rotate (brute force):", [...rotate2]);
rotateBruteForce(rotate2, 2);
console.log("After rotate (brute force):", rotate2);
rotateBruteForceLeft(rotate2, 2);
console.log("After left rotate (brute force):", rotate2);
// Edge case
let rotate3 = [1];
console.log("Before rotate (single element):", [...rotate3]);
rotate(rotate3, 10);
console.log("After rotate (single element):", rotate3);
rotateLeft(rotate3, 10);
console.log("After left rotate (single element):", rotate3);