【Likou】162. Buscando la cima <Dichotomía>

【Likou】162. Buscando la cima

Un elemento pico es aquel cuyo valor es estrictamente mayor que sus vecinos izquierdo y derecho.
Dada una matriz de números enteros, encuentre el elemento pico y devuelva su índice. La matriz puede contener múltiples picos, en cuyo caso es suficiente devolver la ubicación de cualquiera de los picos.
Puede suponer nums[-1] = nums[n] = -∞.
Debe implementar un algoritmo con complejidad de tiempo O (log n) para resolver este problema.

Ejemplo 1:
Entrada: nums = [1,2,3,1]
Salida: 2
Explicación: 3 es el elemento pico y su función debe devolver su índice 2.

Ejemplo 2:
Entrada: nums = [1,2,1,3,5,6,4]
Salida: 1 o 5
Explicación: Su función puede devolver el índice 1, cuyo elemento pico es 2, o devolver el índice 5, cuyo pico El el elemento es 6

提示:
1 <= nums.length <= 1000
- 2 31 2^{31}231 <= números[i] <=2 31 2^{31}231 - 1
tiene nums[i] != nums[i + 1] para todas las i válidas

respuesta

Mejora de la dicotomía (no se requiere clasificación): pase lo que pase, hay un elemento máximo.
Devuelve la posición de cualquier pico: simplemente encuentra el pico local.

public class Solution {
    
    
    public int findPeakElement(int[] nums) {
    
    
        if (nums == null || nums.length == 0) {
    
    
            return -1;
        }

        int left = 0;
        int right = nums.length - 1;

        while (left < right) {
    
    
            int mid = left + (right - left) / 2;

			//mid左边肯定存在峰值
            if (nums[mid] > nums[mid + 1]) {
    
    
                right = mid;
            }
            //mid右边肯定存在峰值
            else {
    
    
                left = mid + 1;
            }
        }
        return left;
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_44033208/article/details/131880258
Recomendado
Clasificación