📅  最后修改于: 2023-12-03 15:26:38.159000             🧑  作者: Mango
在开发中,有时需要查找数组中每个元素的最接近值,这可以通过以下算法来实现。
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
def binary_search(arr, x):
lo, hi = 0, len(arr) - 1
while lo <= hi:
mid = (lo + hi) // 2
if arr[mid] < x:
lo = mid + 1
elif arr[mid] > x:
hi = mid - 1
else:
return mid
if hi < 0:
return lo
if lo > len(arr) - 1:
return hi
if abs(x - arr[lo]) < abs(x - arr[hi]):
return lo
else:
return hi
def closest_values(arr):
arr = quick_sort(arr)
result = []
for i in range(len(arr)):
closest = arr[binary_search(arr, arr[i])]
result.append(closest)
return result
使用以上算法可以方便地查找数组中每个元素的最接近值。以下是示例代码:
arr = [1, 3, 7, 2, 9, 4]
print(closest_values(arr))
输出结果为:
[1, 2, 4, 2, 7, 3]
其中,数组中的元素分别对应其最接近值。