forked from rubythonode/javascript-problems-and-solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwiggle-sort-ii.js
36 lines (33 loc) · 856 Bytes
/
wiggle-sort-ii.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
/**
* Wiggle Sort II
*
* Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]....
*
* Example 1:
*
* Input: nums = [1, 5, 1, 1, 6, 4]
* Output: One possible answer is [1, 4, 1, 5, 1, 6].
*
* Example 2:
*
* Input: nums = [1, 3, 2, 2, 3, 1]
* Output: One possible answer is [2, 3, 1, 3, 1, 2].
*
* Note:
* You may assume all input has valid answer.
*
* Follow Up:
* Can you do it in O(n) time and/or in-place with O(1) extra space?
*/
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
const wiggleSort = nums => {
const n = nums.length;
const sorted = nums.slice().sort((a, b) => a - b);
for (let i = 0, j = n - 1, k = Math.floor((n - 1) / 2); i < n; i++) {
nums[i] = i & 1 ? sorted[j--] : sorted[k--];
}
};
export { wiggleSort };