from typing import (
List,
)
class Solution:
"""
@param a: an integer array
@param target: An integer
@param k: An integer
@return: an integer array
"""
def k_closest_numbers(self, a: List[int], target: int, k: int) -> List[int]:
# write your code here
if not a:
return []
l,r = 0, len(a)-1
while l + 1 < r:
mid = (l+r) // 2
if a[mid] < target :
l = mid
else:
r = mid
res = []
i, j = l, l + 1
#利用m来循环K次,而不是用while+k--,减少错误
for m in range(k):
if i < 0:
res.append(a[j])
j += 1
elif j >= len(a):
res.append(a[i])
i -= 1
else:
if target - a[i] <= a[j] - target:
res.append(a[i])
i -= 1
else:
res.append(a[j])
j += 1
return res