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]