-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path189-rotate-array.js
66 lines (62 loc) · 1.42 KB
/
189-rotate-array.js
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
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function (nums, k) {
const rotateByOne = nums => {
const tmp = nums[nums.length - 1];
for (let i = nums.length - 1; i > 0; i--) {
nums[i] = nums[i - 1];
}
nums[0] = tmp;
}
k %= nums.length;
for (let i = 0; i < k; i++) {
rotateByOne(nums, 1);
}
return nums;
};
var rotate = function (nums, k) {
const len = nums.length;
const tmp = nums.slice(len - k).concat(nums.slice(0, len - k))
for (let i = 0; i < len; i++) {
nums[i] = tmp[i];
}
}
var rotate = function (nums, k) {
k = k % nums.length;
const reverse = (nums, start, end) => {
while (start < end) {
const tmp = nums[start];
nums[start] = nums[end];
nums[end] = tmp;
start++;
end--;
}
return nums;
}
// console.log(reverse([1, 5, 3, 4], 0, 3))
reverse(nums, 0, nums.length - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, nums.length - 1);
}
var rotate = (nums, k) => {
k = k % nums.length;
let count = 0;
for (let i = 0; count < nums.length; i++) {
let pos = i;
let pre = nums[i];
do {
pos = (pos + k) % nums.length;
const tmp = nums[pos];
nums[pos] = pre;
pre = tmp;
count++;
} while (pos != i);
}
}
const nums = [1, 2, 3, 4, 5, 6, 7];
// const nums = [-1];
rotate(nums, 2)
console.log(nums);