https://leetcode.com/problems/check-if-n-and-its-double-exist/description/ | Easy |
---|
Дан массив целых чисел arr
. Верни true
, если существует пара индексов i
и j
, таких что:
• i != j
• arr[i] == 2 * arr[j]
или arr[j] == 2 * arr[i]
. Иначе верни false
.
Input:
arr = [10, 2, 5, 3]Output:
trueExplanation:
10 == 2 * 5
Input:
arr = [3, 1, 7, 11]Output:
falseExplanation:
Нет таких пар
fun checkIfExist(arr: IntArray): Boolean {
// Создаём множество для хранения уже просмотренных чисел
val seen = mutableSetOf<Int>()
for (num in arr) {
// Проверяем наличие удвоенного значения или половины (если чётное)
if ((2 * num) in seen || (num % 2 == 0 && num / 2 in seen)) {
return true
}
// Добавляем текущее число в множество
seen.add(num)
}
return false
}
O(n)
, где n
— длина массива, за один проход с операциями в множестве.
O(n)
, для хранения элементов в множестве.