Рубрики

Программа Python для поиска ближайшей пары из двух отсортированных массивов

Учитывая два отсортированных массива и число x, найдите пару, сумма которой ближе всего к x, и у пары есть элемент из каждого массива .

Нам даны два массива ar1 [0… m-1] и ar2 [0..n-1] и число x, нам нужно найти пару ar1 [i] + ar2 [j] такую, что абсолютное значение (ar1 [i] + ar2 [j] — x) минимально.

Пример:

Input:  ar1[] = {1, 4, 5, 7};
        ar2[] = {10, 20, 30, 40};
        x = 32      
Output:  1 and 30

Input:  ar1[] = {1, 4, 5, 7};
        ar2[] = {10, 20, 30, 40};
        x = 50      
Output:  7 and 40

python3

# Python3 программа для поиска пары из
# два отсортированных массива так, что сумма
# пары ближе всего к данному числу x

import sys

  
# ar1 [0..m-1] и ar2 [0..n-1] два
# дано отсортированных массивов и дано x
# число. Эта функция печатает пару
# из обоих массивов, так что сумма
# пары ближе всего к х.

def printClosest(ar1, ar2, m, n, x):

  

    # Инициализировать разницу между

    # сумма пары и х.

    diff = sys.maxsize

  

    # res_l и res_r - результат

    # индексы из ar1 [] и ar2 []

    # соответственно. Начать слева

    # сторона ar1 [] и правая сторона ar2 []

    l = 0

    r = n-1

    while(l < m and r >= 0):

      

    # Если эта пара ближе к х, чем

    # ранее найденный ближайший,

    # затем обновите res_l, res_r и diff

        if abs(ar1[l] + ar2[r] - x) < diff:

            res_l = l

            res_r = r

            diff = abs(ar1[l] + ar2[r] - x)

      

  

    # Если сумма этой пары больше, чем х,

    # перейти на меньшую сторону

        if ar1[l] + ar2[r] > x:

            r = r-1

        else: # перейти в большую сторону

            l = l + 1

      

  

    # Распечатать результат

    print("The closest pair is [",

         ar1[res_l], ", ", ar2[res_r], "]")

  
# Драйверная программа для проверки вышеуказанных функций

ar1 = [1, 4, 5, 7]

ar2 = [10, 20, 30, 40]

m = len(ar1)

n = len(ar2)

x = 38

printClosest(ar1, ar2, m, n, x)

  
# Этот код предоставлен Смитой Динеш Семвал

Выход:

The closest pair is [ 7 ,  30 ]

Пожалуйста, обратитесь к полной статье на Найти ближайшую пару из двух отсортированных массивов для более подробной информации!

Рекомендуемые посты:

Программа Python для поиска ближайшей пары из двух отсортированных массивов

0.00 (0%) 0 votes