LeetCode título cepillo irregular --Peak Buscador

Buscador de pico

problema

Buscar un pico en una matriz, de modo que pueda ser mayor que sus vecinos. Ambos extremos de la matriz pueden ser asumidos para ser infinito negativo.

Descripción específica

Un elemento de pico es un elemento que es mayor que sus vecinos.

Dada una matriz de entrada, donde num[i] ≠ num[i+1], encontrar un elemento de pico y regresar su índice.

La matriz puede contener múltiples picos, en ese caso devolver el índice a cualquiera de los picos está muy bien.

Es posible imaginar que num[-1] = num[n] = -∞.

Por ejemplo, en matriz [1, 2, 3, 1], 3 es un elemento de pico y su función debe devolver el número de índice 2.

Descripción del algoritmo

  1. Porque suponemos que ambos extremos del infinito negativo, siempre y cuando nos encontramos con el primer elemento de la matriz es mayor que el segundo o el último elemento es mayor que el penúltimo elemento de explicarlo a pico. Si no lo encuentra al utilizar un bucle para recorrer la matriz para determinar si un elemento es mayor que su vecino, se puede encontrar de retorno. La complejidad es O (n)
  2. Fácil de demostrar en cualquier secuencia podemos encontrar un pico local, por lo que utilizamos dicotomía tratan de determinar el centro del elemento no es, y si no es así, determinar si los elementos del elemento medio es mayor que el derecho, será más grande que la secuencia más pequeña es una secuencia de izquierda y viceversa. La complejidad es O (log n)

código

public static int traversal(int []numbers){
		if(numbers[0]>=numbers[1]){
			return numbers[0];
		}
		else if (numbers[numbers.length-1]>=numbers[numbers.length-2]){
			return numbers[numbers.length-1];
		}
		else{
		for(int i=1;i<numbers.length-1;i++){
			if(numbers[i-1]<=numbers[i]&&numbers[i+1]<=numbers[i]){
				return numbers[i];
			}
		}
		}
		return 0;
	}
public static int binarySearch(int []numbers){
		int low=0;
		int high=numbers.length-1;
		int mid=0;
		while(high>low){
			mid=(high+low)/2;
			if(numbers[mid]>=numbers[mid-1]&&numbers[mid]>=numbers[mid+1]){
				return numbers[mid];
			}
			else if(numbers[mid]>=numbers[mid+1]){
				high=mid;
			}
			else{
				low=mid+1;
			}
		}
		return low;
	}

más información

respuestas detalladas a las preguntas

Publicados 173 artículos originales · ganado elogios 110 · Vistas de 100.000 +

Supongo que te gusta

Origin blog.csdn.net/qq_35564813/article/details/104723840
Recomendado
Clasificación