# Wiggle Sort II problem

0 like 0 dislike
96 views

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.

Can you do it in O(n) time and/or in-place with O(1) extra space?

0 like 0 dislike
by Goeduhub's Expert (2.3k points)

• Just put sorted numbers in array
• Put largest numbers in odd indexes first
• Then put remaining numbers in even indexes
• So even < odd > even

class Solution:

def wiggleSort(self, nums: List[int]) -> None:

"""

Do not return anything, modify nums in-place instead.

[1,1,1,4,5,6]

"""

arr = sorted(nums)

for i in range(1, len(nums), 2): nums[i] = arr.pop()

for i in range(0, len(nums), 2): nums[i] = arr.pop()

eg : ans = Solution()

ans.wiggleSort([1, 5, 1, 1, 6, 4])

Output -

[1, 4, 1, 5, 1, 6]