Я столкнулся с проблемой, когда мы получаем отсортированный список чисел, и в какой-то момент числа в списке начинают повторяться, что-то вроде 0,1,2,3,4,5,6,7,8,8,8
, нам нужно получить позицию, с которой началось повторение.
Ниже приведен подход, который я выбрал ...
function find(arr) {
let max = arr.length-1
let min = 0
do {
let iter = Math.round((min + max) / 2)
if (arr[max] == arr[iter])
max = iter
else
min = iter
} while (min + 1 < max)
return max
}
arr = [0,1,2,3,4,5,6,7,8,8,8]
console.log(find(arr))
arr = [0,1,2,2,2,2,2,2,2,2,2]
console.log(find(arr))
arr = [2,4,6,8,10,10]
console.log(find(arr))
Вероятно, существует рекурсивный способ, но я не мог понять это
Есть ли более эффективный способ решить эту проблему?