📌  相关文章
📜  查找数组中每个元素的最接近值(1)

📅  最后修改于: 2023-12-03 15:26:38.159000             🧑  作者: Mango

查找数组中每个元素的最接近值

在开发中,有时需要查找数组中每个元素的最接近值,这可以通过以下算法来实现。

算法
  1. 首先对数组进行排序,使用快速排序或归并排序等算法实现。这里以快速排序为例。
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)
  1. 对于要查找最接近值的元素,使用二分查找算法在经过排序的数组中查找其位置,如果该元素在数组中存在,则直接返回该元素;否则,返回其前后位置中绝对值更小的元素。
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
  1. 将以上两个算法结合起来,遍历数组中的每个元素,并输出其最接近值。
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]

其中,数组中的元素分别对应其最接近值。