658. 找到 K 個最接近的元素(中等)

題目描述:

給定一個排序好的數組,兩個整數 k 和 x,從數組中找到最靠近 x(兩數之差最小)的 k 個數。
返回的結果必須要是按升序排好的。如果有兩個數與 x 的差值一樣,優先選擇數值較小的那個數。

示例 1:
輸入: [1,2,3,4,5], k=4, x=3
輸出: [1,2,3,4]

示例 2:
輸入: [1,2,3,4,5], k=4, x=-1
輸出: [1,2,3,4]

思路:重新定義二分的目標,找到一個位置使得x位於mid和mid+k之間。

class Solution:
    def findClosestElements(self, arr: List[int], k: int, x: int) -> List[int]:
        
        l = 0
        r = len(arr) - k
        while l < r:
            mid = (r - l) // 2 + l
            if x - arr[mid] > arr[mid + k] - x:
                l = mid + 1
            else:
                r = mid
        return arr[l: l + k]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章