周賽 403。

題目

你有一個浮點數陣列 averages,初始值為空。
輸入長度 n 的整數陣列 nums,且保證 n 是偶數。

你必須執行以下操作 n / 2 次:

  • 刪除 nums 中最小的元素 minElement,還有最大的元素 maxElement
  • 將 (minElement + maxElement) / 2 加入 averages

回傳 averages 的最小值。

解法

按照題意模擬。
為了方便取最大 / 最小值,把 nums 排序後放入雙向隊列中,重複操作直到隊列為空。

時間複雜度 O(n log n)。
空間複雜度 O(n)。

class Solution:
    def minimumAverage(self, nums: List[int]) -> float:
        q = deque(sorted(nums))
        avgs = []
        while q:
            a = q.popleft()
            b = q.pop()
            avgs.append((a + b) / 2)
            
        return min(avgs)

nums 原地排序後,直接枚舉可以節省額外空間。

時間複雜度 O(n log n)。
空間複雜度 O(1)。

class Solution:
    def minimumAverage(self, nums: List[int]) -> float:
        N = len(nums)
        nums.sort()
        ans = inf
        for i in range(N // 2):
            a = nums[i]
            b = nums[N - 1 - i]
            ans = min(ans, (a + b) / 2)
            
        return ans