Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]….
Example:
(1) Given nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6].
(2) Given nums = [1, 3, 2, 2, 3, 1], 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?
解法1: O(NlogN)
比较基本的解法就是先排序,然后就可以重新建一个数组,从前半部分去一个然后后半部分取一个交替进行。
要注意的是,因为array可能有重复的数字出现,所以不能从两边往当中,这样最后可能会碰到两个数字一样,比如[4,5,5,6]
。
这是需要注意的。
|
|
Follow up: O(N), virtual indexing
这个还没看懂。。。