Idea: esta
pregunta es un poco complicada. Eso es si la matriz Liman tiene valores duplicados. Por ejemplo, en el caso de 3,1,1,2,2,2,2,2, esta pregunta sin duda se hace con dicotomía. Solo necesita encontrar el límite del último elemento de la matriz, pero tiene miedo En casos especiales, el enfoque aquí es mover el elemento al final de la línea divisoria un lugar hacia adelante, y usar el anterior para encontrar la línea divisoria. Si el anterior tiene valores duplicados, entonces avance.
Código:
class Solution {
public:
int minArray(vector<int>& numbers) {
int i = 0, j = numbers.size() - 1;
while (i < j) {
int m = (i + j) / 2;
if (numbers[m] > numbers[j]) i = m + 1;
else if (numbers[m] < numbers[j]) j = m;
else j--;
}
return numbers[i];
}
};