给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。
你可以假设所有输入数组都可以得到满足题目要求的结果。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/wiggle-sort-ii
例:
输入:nums = [1,5,1,1,6,4]
输出:[1,6,1,5,1,4]
解释:[1,4,1,5,1,6] 同样是符合题目要求的结果,可以被判题程序接受。
解析:
中间的数比两边的数大,那么只需要分成两部分,大的一部分,小的一部分,大的那部分最小的也比小的那部分最大的要大,然后穿插排列即可。用sort()函数排序分离即可。在插入时需要反序插入,为了防止相同值在分离边界的情况。例如:[4, 5, 5, 6],若不反序则会得到结果:[4, 5, 5, 6],和原题没差。
class Solution(object):
def wiggleSort(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
nums.sort() # 排序
k = len(nums[::2]) # 取一半
nums[::2], nums[1::2] = nums[:k][::-1], nums[k:][::-1] # 两部分分别反序插入