Пример:
val a = arrayOf(1, 2, 5, 7, 9, 15)
val b = arrayOf(15, 3, 5, 8)
val c = a intersect b.toList()
if (!c.isEmpty()) {
println("Arrays have common elements ${c}")
} else {
println("Arrays do not have common elements")
}
Результат:
Arrays have common elements [5, 15]
Реализация пересекается в Kotlin используйте Set:
val set = this.toMutableSet()
set.retainAll(other)
return set
и должно быть достаточно для большинства типичных casses, например, если оба массива имеют 10 000 000 элементов, это займет около 8 с.
В случае, когда массивы очень большие (например, когда набор из такого большого количества элементов не помещается в памяти), возможное решение - сортировать массивы и делать что-то вроде слияния отсортированных массивов:
fun hasIntersection(a: IntArray, b: IntArray): Boolean {
a.sort()
b.sort()
var i = 0
var j = 0
while (i < a.size && j < b.size) {
if (a[i] < b[j]) {
i++
} else if (a[i] > b[j]) {
j++
} else {
return true
}
}
return false
}