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