题:https://leetcode.com/problems/wiggle-sort-ii/description/
题目
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?
思路
题目大意
对nums排序,使得该序列满足
nums[0] < nums[1] > nums[2] < nums[3]…
解题思路
方法1.时间复杂 O(nlogn) (排序) 和 空间复杂度O(n)。
步骤:
- 将nums升序排列生成 snums
- 从后向前遍历 snums ,按照 先 奇数位置 后 偶数位置 放置在 nums上。所以 奇数位置 或 偶数位置 都是降序的。这是当出现 [4,5,5,6] 时能 避免成为 [4,5,5,6],这时候 下标1,2 不符合题目要求。
code
class Solution:
def wiggleSort(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
snums = sorted(nums)
numslen = len(nums)
for i in list(range(1,numslen,2)) + list(range(0,numslen,2)) :
nums[i] =snums.pop()