[Las 101 entrevistas imprescindibles] Encuentre picos y pares de orden inverso en matrices

Tabla de contenido

Tema: Buscando picos_Nike Topics_Nike Network (nowcoder.com)

Interfaz de preguntas:

Ideas para resolver problemas:

Código:

¡Aprobado! ! !

Tema: Pares de orden inverso en Arrays_Niuke Topic_Niuke.com (nowcoder.com)

Interfaz de preguntas:

Ideas para resolver problemas:

Código:

¡Aprobado! ! !

Escribe al final:


Tema: Buscando picos_Nike Topics_Nike Network (nowcoder.com)

Interfaz de preguntas:

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型
*/
func findPeakElement( nums []int ) int {
    // write code here
}

Ideas para resolver problemas:

En primer lugar, me gustaría agregar: si hay algún problema con la autoevaluación de esta pregunta, no lo crea, simplemente envíela si la lógica es correcta.

Esta pregunta también es una pregunta de bisección muy clásica. La bisección no requiere una matriz ordenada para usar la bisección. La esencia de la bisección radica en la monotonicidad de los datos. La bisección consiste en eliminar rápidamente parte del problema a través de la monotonicidad de los datos y encontrar un objeto de referencia. Los datos,

Tome esta pregunta como ejemplo: la pregunta requiere que no importa qué pico de montaña se devuelva, solo tenemos dos situaciones a considerar, una está a la izquierda de la montaña (intervalo creciente) y la otra está a la derecha de la montaña. (intervalo decreciente). Si está en el intervalo creciente, podemos excluir los datos de la izquierda. Si está en el intervalo decreciente, podemos excluir los datos de la derecha junto con los nuestros. De esta manera, la idea de ​​Se utiliza dicotomía, el código es el siguiente

Código:

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型
*/
func findPeakElement( nums []int ) int {
    left, right := 0, len(nums)-1
    for left < right {
        mid := left + (right - left + 1) / 2
        if nums[mid] > nums[mid-1] {
            left = mid
        } else {
            right = mid-1
        }
    }
    return left
}

¡Aprobado! ! !

Tema: Pares de orden inverso en Arrays_Niuke Topic_Niuke.com (nowcoder.com)

Interfaz de preguntas:

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型
*/
func InversePairs( nums []int ) int {
    // write code here
}

Ideas para resolver problemas:

Si usa la fuerza bruta para resolver esta pregunta, definitivamente tendrá una complejidad de tiempo básica de O (N). Si desea lograr N * logN, debe pensar en otras soluciones. Esta pregunta también es una pregunta muy clásica. Examina cómo escribir ordenamiento combinado.

Al utilizar la idea de ordenación por combinación, podemos completar los requisitos de la pregunta en el proceso de usar la ordenación por combinación. El código es el siguiente

Código:

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums int整型一维数组
 * @return int整型
 */
func InversePairs(nums []int) int {
	if len(nums) < 2 {
		return 0
	}

	count := 0
    var mergeSort func(left, right int)
    var merge func(left, right, mid int)

	mergeSort = func(left, right int) {
		if left >= right {
			return
		}

		mid := left + (right-left)/2
		mergeSort(left, mid)
		mergeSort(mid+1, right)
		merge(left, right, mid)
	}

	merge = func(left, right, mid int) {
		l, r := left, mid+1
		res := make([]int, right-left+1)
		index := 0
		for l <= mid && r <= right {
			if nums[l] <= nums[r] {
				res[index] = nums[l]
				l++
				index++
			} else {
				res[index] = nums[r]
				r++
				index++

				count += mid + 1 - l
				count %= 1000000007
			}
		}

		for l <= mid {
			res[index] = nums[l]
			index++
			l++
		}
		for r <= right {
			res[index] = nums[r]
			index++
			r++
		} 
		l = left
		for _, v := range res {
			nums[l] = v
			l++
		}
	}

	mergeSort(0, len(nums)-1)
	return count
}

¡Aprobado! ! !

Escribe al final:

Ese es el contenido de este artículo, gracias por leer.

Si crees que has ganado algo, puedes darle un me gusta al blogger .

Si hay omisiones o errores en el contenido del artículo, envíe un mensaje privado al blogger o indíquelo en el área de comentarios ~

Supongo que te gusta

Origin blog.csdn.net/Locky136/article/details/133279344
Recomendado
Clasificación