K Closest Number in Sorted Array
Solution
class Solution:
# @param {int[]} A an integer array
# @param {int} target an integer
# @param {int} k a non-negative integer
# @return {int[]} an integer array
def kClosestNumbers(self, A, target, k):
# Algorithm:
# 1. Find the first index that A[index] >= target
# 2. Set two pointers left = index - 1 and right = index
# 3. Compare A[left] and A[right] to decide which pointer should move
index = self.firstIndex(A, target)
left, right = index - 1, index
result = []
for i in range(k):
if left < 0:
result.append(A[right])
right += 1
elif right == len(A):
result.append(A[left])
left -= 1
else:
if target - A[left] <= A[right] - target:
result.append(A[left])
left -= 1
else:
result.append(A[right])
right += 1
return result
def firstIndex(self, A, target):
start, end = 0, len(A) - 1
while start + 1 < end:
mid = (start + end) / 2
if A[mid] < target:
start = mid
else:
end = mid
if A[start] >= target:
return start
if A[end] >= target:
return end
return len(A)Last updated