Leetcode 刷题 - 280 - Wiggle Sort

Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] <= nums[3]....

For example, given nums = [3, 5, 2, 1, 6, 4], one possible answer is [1, 6, 2, 5, 3, 4].


根据题意,不去看给出的例子,那是一个特例,没有推导的意义。看list reorder的公式

我们可以得到结论,当index是奇数的时候,值大于偶数的值。那么index余1的时候,nums[index] > nums[index-1],余0的时候,反一反。

if i % 2 == 1: nums[i] > nums[i-1] # nums[1] > nums[0] 
if i % 2 == 0: nums[i] < nums[i-1] # nums[2] < nums[1]

所以,我们能总结到,如果index余1,并且同时nums[i-1] > nums[i] 的时候,两个index的值需要互换。

if (i % 2 == 1) == (nums[i-1] > nums[i]):
    nums[i-1], nums[i] = nums[i], nums[i-1]

这个的意思也就是,如果index余0,并且同时nums[i-1] < nums[i],两个index的值互换。

if (i % 2 == 0) == (nums[i-1] < nums[i]):
    nums[i-1], nums[i] = nums[i], nums[i-1]

所以是用 == 来对两个boolean返回值做比较,表示if and only if,两个条件都达成或者都失败的时候执行后续代码。


class Solution(object):
    def wiggleSort(self, nums):
        """
        :type nums: List[int]
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        for i in range(1, len(nums)):
            if (i % 2 == 0) == (nums[i-1] < nums[i]):
                nums[i-1], nums[i] = nums[i], nums[i-1]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值