Вопрос о паре целых чисел на Hackerrank, исключение таймаута [закрыто]

Вопрос или проблема

Дано массив целых чисел. Посчитайте количество идеальных пар из массива. Идеальная пара – это пара целых чисел (x, y), если выполнены оба следующих условия:

min(|x-y|,|x+y|) <=min(|x|,|y|) 
max(|x-y|,|x+y|) >= max(|x|,|y|) 

Ответ или решение

Для решения задачи по подсчёту «Совершенных пар» из массива целых чисел, необходимо учесть условия, при которых пара целых чисел (x, y) считается совершенной. Пара считается совершенной, если выполняются два следующих условия:

  1. ( \text{min}(|x – y|, |x + y|) \leq \text{min}(|x|, |y|) )
  2. ( \text{max}(|x – y|, |x + y|) \geq \text{max}(|x|, |y|) )

Чтобы эффективно решить эту задачу, можно воспользоваться двойным циклом для перебора всех пар чисел в массиве и проверки вышеуказанных условий.

Ниже приведён пример реализации данного алгоритма на языке Python:

def count_perfect_pairs(arr):
    n = len(arr)
    count = 0

    # Перебираем все возможные пары (i, j)
    for i in range(n):
        for j in range(i + 1, n):  # j начинается с i + 1, чтобы избежать повторений
            x = arr[i]
            y = arr[j]

            # Рассчитываем необходимые значения
            abs_x_y = abs(x - y)
            abs_x_plus_y = abs(x + y)
            abs_x = abs(x)
            abs_y = abs(y)

            # Проверяем условия для совершенной пары
            if min(abs_x_y, abs_x_plus_y) <= min(abs_x, abs_y) and max(abs_x_y, abs_x_plus_y) >= max(abs_x, abs_y):
                count += 1

    return count

# Пример использования
arr = [1, 2, 3, -4]
result = count_perfect_pairs(arr)
print(f'Количество совершенных пар: {result}')

Пояснение к коду:

  • Мы создаем функцию count_perfect_pairs, которая принимает на вход массив целых чисел arr.
  • Внутри функции мы инициализируем счётчик count, который будет хранить количество совершенных пар.
  • Двойной цикл перебирает все уникальные пары (x, y). Первый цикл проходит по всем элементам массива, а второй цикл начинает с элемента, следующего за текущим элементом первого цикла, чтобы избежать дублирующих пар (например, (x, y) и (y, x)).
  • Для каждой пары рассчитываются требуемые величины, такие как ( |x – y| ) и ( |x + y| ), а затем проверяются условия для совершенной пары.
  • Если обе проверки пройдены, счётчик count увеличивается на единицу.
  • В конце функция возвращает общее количество совершенных пар.

Оптимизация:

В текущем решении временная сложность составляет O(n^2), что может быть неэффективно для больших массивов. Для оптимизации потребуется разработать более сложный алгоритм, который мог бы улучшить вычислительную эффективность, например, использование структур данных для хранения значения и более быстрого доступа к парам.

Этот код должен помочь вам посчитать количество «Совершенных пар» в массиве.

Оцените материал
Добавить комментарий

Капча загружается...