LeetCode每日一题——324. 摆动排序 II

简介: 给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。

题目

给你一个整数数组 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]
目录
相关文章
|
2天前
|
机器学习/深度学习
leetcode:面试题 17.04. 消失的数字(找单身狗/排序/公式)
leetcode:面试题 17.04. 消失的数字(找单身狗/排序/公式)
21 0
|
2天前
|
Go
golang力扣leetcode 34.在排序数组中查找元素的第一个和最后一个位置
golang力扣leetcode 34.在排序数组中查找元素的第一个和最后一个位置
70 0
|
2天前
|
存储 JavaScript
leetcode82. 删除排序链表中的重复元素 II
leetcode82. 删除排序链表中的重复元素 II
25 0
|
2天前
leetcode83. 删除排序链表中的重复元素
leetcode83. 删除排序链表中的重复元素
12 0
|
2天前
|
索引
力扣1859 将句子排序
力扣1859 将句子排序
|
2天前
leetcode:217. 存在重复元素(先排序再比较邻位)
leetcode:217. 存在重复元素(先排序再比较邻位)
16 0
|
2天前
|
算法 测试技术 C#
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II
|
2天前
leetcode-148:排序链表
leetcode-148:排序链表
26 0
|
2天前
|
算法
leetcode-34:在排序数组中查找元素的第一个和最后一个位置
leetcode-34:在排序数组中查找元素的第一个和最后一个位置
18 0
|
2天前
leetcode-969:煎饼排序
leetcode-969:煎饼排序
26 0