題目描述:
給定一個排序好的數組,兩個整數 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]