题目
思路
1.先二分搜索,找到小于等于x的数中最大的那个
2.然后双指针找到k个差最小的数
代码
class Solution:
def findClosestElements(self, arr: List[int], k: int, x: int) -> List[int]:
n = len(arr)
left = 0
right = n - 1
while left <= right:
mid = left + (right - left) // 2
if arr[mid] <= x:
left = mid + 1
else:
right = mid - 1
rp = left
lp = rp - 1
for _ in range(k):
if rp > n-1:
lp -= 1
elif lp < 0:
rp += 1
elif (arr[rp] - x) < (x-arr[lp]):
rp += 1
else:
lp -= 1
return arr[lp + 1: rp]