LeetCode 303, 560, 1248 (suma de prefijo)

303. La región y la matriz de búsqueda son inmutables

Dado un número entero de matrices, encuentre la suma de los elementos en la matriz del índice i a j (i ≤ j), incluidos i y j.

Ejemplos:

Dado nums = [-2, 0, 3, -5, 2, -1], la función de suma es sumRange ()

sumRange (0, 2) -> 1
sumRange (2, 5) -> -1
sumRange (0, 5) -> -3
说明:

Puede suponer que la matriz es inmutable.
El método sumRange se llama varias veces.

Código 303

type NumArray struct {
	Value []int
}

func Constructor(nums []int) NumArray {
	arr := NumArray{[]int{0}}  // 浪费第一个空间
	// 1, 2, 3, 4, 5
	for i, v := range nums {
		// 1, 3, 6, 10, 15
		arr.Value = append(arr.Value, v + arr.Value[i])
	}
	return arr
}

func (this *NumArray) SumRange(i int, j int) int {
	// i = 0; j = 3 
	// [3+1] - [0] = 15 - 1 = 14 = 1 + 2 + 3 + 4 
	return this.Value[j+1] - this.Value[i]
}

560. Suma es un subconjunto de K

Dada una matriz de enteros y un entero k, necesita encontrar el número de submatrices consecutivas en la matriz cuya suma es k.

Ejemplo 1:

Entrada: nums = [1,1,1], k = 2
Salida: 2, [1,1] y [1,1] son ​​dos situaciones diferentes.
Explicación

La longitud de la matriz es [1, 20,000].
El rango de elementos en la matriz es [-1000, 1000], y el rango del entero k es [-1e7, 1e7].

Código 560

func subarraySum(nums []int, k int) int {   
    res , m , sum := 0, make(map[int]int,0),0
    m[0] = 1
    for i:=0;i<len(nums);i++{
        sum += nums[i]
        if _,ok := m[sum-k];ok{
            res += m[sum-k]
        }
        m[sum]++
    }
    return res
}

1248. Estadísticas "Beautiful Subarrays"

Le da una matriz de números enteros y un número entero k.

Si hay exactamente k números impares en una sub-matriz continua, consideramos que esta sub-matriz es una "sub-matriz elegante".

Devuelva el número de "subarreglos hermosos" en esta matriz.

Ejemplo 1:

Entrada: nums = [1,1,2,1,1], k = 3
Salida: 2
Explicación: Las sub-matrices que contienen 3 números impares son [1,1,2,1] y [1,2,1,1 ]
Ejemplo 2

Entrada: nums = [2,4,6], k = 1
Salida: 0
Explicación: La secuencia no contiene ningún número impar, por lo que no hay una sub-matriz elegante.
Ejemplo 3

Entrada: nums = [2,2,2,1,2,2,1,2,2,2], k = 2
Salida: 16

Consejos:

1 <= nums.length <= 50000
1 <= nums [i] <= 10 ^ 5
1 <= k <= nums.length

Código 1248

¡Esta pregunta es estrictamente una categoría de programación dinámica!
Inserte la descripción de la imagen aquí

func numberOfSubarrays(nums []int, k int) int {
	dp := make([]int, 0)
	cnt, ret := 0, 0
	for i := 0; i < len(nums); i++ {
	
		cnt++
        // 每次遇到奇数。记录他前面的偶数个数
		if nums[i]%2 == 1 {
			dp = append(dp, cnt)
			cnt = 0
		}
       
		if len(dp) >= k {
			ret += dp[len(dp) - k]
		}
	}
	return ret
}
401 artículos originales publicados · Me gusta 273 · Visitas 420,000+

Supongo que te gusta

Origin blog.csdn.net/csdn_kou/article/details/105668421
Recomendado
Clasificación