二分搜索(5)-找到 K 个最接近的元素

26 阅读1分钟

题目

找到 K 个最接近的元素

思路

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]