给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。如果有两个数与 x 的差值一样,优先选择数值较小的那个数。
输入: [1,2,3,4,5], k=4, x=3
输出: [1,2,3,4]
输入: [1,2,3,4,5], k=4, x=-1
输出: [1,2,3,4]
说明:
从头开始遍历,遇到右边界就停止。
class Solution:
def findClosestElements(self, arr: List[int], k: int, x: int) -> List[int]:
res = []
for i in range(len(arr)):
if len(res) < k:
res.append(arr[i])
else:
if arr[i] > x and abs(arr[i] - x) >= abs(res[0] - x):
break
res.pop(0)
res.append(arr[i])
return res
二分查找,定位左边界的位置。
class Solution:
def findClosestElements(self, arr: List[int], k: int, x: int) -> List[int]:
i, j = 0, len(arr) - k
while i < j:
mid = (i + j)//2
if x - arr[mid] > arr[mid + k] - x:
i = mid + 1
else:
j = mid
return arr[i:i+k]