题目
给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。
你可以假设所有输入数组都可以得到满足题目要求的结果。
示例
示例 1:
输入:nums = [1,5,1,1,6,4]
输出:[1,6,1,5,1,4]
解释:[1,4,1,5,1,6]同样是符合题目要求的结果,可以被判题程序接受。
示例 2:
输入:nums = [1,3,2,2,3,1]
输出:[2,3,1,3,1,2]
思路
题目意思是:将给定数组转换为大小数间隔出现的数组,本题即 小数—大数—小数—大数的形式。
这里可以采用穿插排序的方式:先对数组排序,分为大数部分和小数部分,再穿插排序。 注意顺序,例如[1,3,4,4,4,7]这个数组,通过降序穿插得到[4,7,3,4,1,4]。 如果顺序排列,则会得到[1,4,3,4,4,7]不满足要求。 这里是因为我们想尽量将小数部分的最大数放在边上,这样只用靠近一个大数部分的最大数。
题解
class Solution:
def wiggleSort(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
nums.sort()
half = len(nums[::2])
nums[::2], nums[1::2] = nums[:half][::-1], nums[half:][::-1]