Espada se refiere a Oferta ------- el número más pequeño de la matriz giratoria

Inserte la descripción de la imagen aquí

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];
    }
};

Supongo que te gusta

Origin blog.csdn.net/weixin_43743711/article/details/115067229
Recomendado
Clasificación