↓ 跳过正文
  1. 科学/
  2. 计算机/
  3. 算法/
  4. Leetcode/
  5. 0300-0399/

0324 摆动排序 II

Solution

from typing import List

class Solution:
    def wiggleSort(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        arr = sorted(nums)
        n = len(arr)
        i, j = (n - 1) >> 1, n - 1
        for k in range(n):
            if k % 2 == 0:
                nums[k] = arr[i]
                i -= 1
            else:
                nums[k] = arr[j]
                j -= 1

if __name__ == "__main__":
    sol = Solution()
    test1 = [1,5,1,1,6,4]
    sol.wiggleSort(test1)
    print(test1) # [1,6,1,5,1,4]
    test2 = [1,3,2,2,3,1]
    sol.wiggleSort(test2)
    print(test2) # [2,3,1,3,1,2]

Solution 2

from typing import List

class Solution:
    def wiggleSort(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        bucket = [0] * 5001
        for v in nums:
            bucket[v] += 1
        n = len(nums)
        j = 5000
        # 先填奇数位:1,3,5... 放大数
        for i in range(1, n, 2):
            while bucket[j] == 0:
                j -= 1
            nums[i] = j
            bucket[j] -= 1
        # 再填偶数位:0,2,4... 放小数
        for i in range(0, n, 2):
            while bucket[j] == 0:
                j -= 1
            nums[i] = j
            bucket[j] -= 1

if __name__ == "__main__":
    sol = Solution()
    test1 = [1,5,1,1,6,4]
    sol.wiggleSort(test1)
    print(test1) # [1,6,1,5,1,4]
    test2 = [1,3,2,2,3,1]
    sol.wiggleSort(test2)
    print(test2) # [2,3,1,3,1,2]