在排序数组中找最接近的K个数
https://www.lintcode.com/problem/460/
输入: A = [1, 2, 3], target = 2, k = 3输出: [2, 1, 3]输入: A = [1, 4, 6, 8], target = 3, k = 3输出: [4, 1, 6]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
Last updated