169. La mayor parte de los elementos Golang un problema método diaria Mojiang de la ley divide y vencerás referéndum

169. La mayor parte de los elementos

Dada una matriz de tamaño n, la mayoría de los elementos que se encuentran en el mismo. La mayoría de los elementos de la matriz se refiere al número de ocurrencias mayores que ⌊ n / 2 ⌋ elementos.
Se puede suponer que la matriz es no vacío, y siempre hay la mayoría de los elementos de una matriz dada.

Ejemplo 1:

Entrada: [3,2,3]
de salida: 3

Ejemplo 2:

Entrada: [2,2,1,1,1,2,2]
de salida: 2

mi respuesta

Este tema es muy simple de hacerlo, como el número de registro de mapa. Aquí están tres solución de habilidad poco.

la ley de lotería

Yo este enfoque es cuestionable, sin ningún conocimiento previo de la situación, creo aleatoria y secuencial humo de bombeo no hay ninguna diferencia, sino también el orden de bombeo para evitar la duplicación. Aún así, yo escribo una, mirada en la línea.

func majorityElement(nums []int) int {
	for true {
		randomIndex := rand.Intn(len(nums))
		fmt.Println(randomIndex)
		cnt := 0
		for i := 0; i < len(nums); i++ {
			if nums[i] == nums[randomIndex] {
				cnt++
			}
		}
		if cnt > len(nums)/2 {
			return nums[randomIndex]
		}
	}
	return -1
}

Divide y vencerás

Para una matriz de puntos en un medio, si un número es el modo, en el que al menos parte de ella está en el modo.

func majorityElement(nums []int) int {
	if len(nums) == 1 {
		return nums[0]
	}
	leftMaj := majorityElement(nums[0 : len(nums)/2])
	rightMaj := majorityElement(nums[len(nums)/2 : len(nums)])
	if isMaj(nums, leftMaj) {
		return leftMaj
	}
	if isMaj(nums, rightMaj) {
		return rightMaj
	}
	return -1
}

Ley de votación

Mira interés Boyer-Moore voto algoritmo .
Tiempo de O (n), el espacio O (1), el público óptima.

func majorityElement(nums []int) int {
	cnt := 0
	maj := nums[0]
	for i, v := range nums {
		if cnt == 0 {
			cnt = 1
			maj = nums[i]
		} else {
			if v == maj {
				cnt++
			} else {
				cnt--
			}
		}
	}
	return maj
}
Publicado 38 artículos originales · ganado elogios 0 · Vistas 1029

Supongo que te gusta

Origin blog.csdn.net/Cyan1956/article/details/104837047
Recomendado
Clasificación