[Leetcode] 303. Área y matriz de recuperación inmutable (rango-suma-consulta-inmutable) (suma de prefijo) [simple]

Enlace

https://leetcode-cn.com/problems/range-sum-query-immutable/

pérdida de tiempo

Resolución de problemas: 5 min
Resolución de problemas: 5 min

Título

Dada una matriz de números enteros, encuentre la suma de los elementos en el rango del índice i al j (i ≤ j), incluidos dos puntos i y j.

Implemente la clase NumArray:

  • NumArray (int [] nums) usa los números de matriz para inicializar el objeto
  • int sumRange (int i, int j) devuelve la suma de los elementos de la matriz nums del índice i al j (i ≤ j), incluidos dos puntos i y j (es decir, sum (nums [i], nums [i + 1],…, Números [j]))

inmediato:

  • 0 <= núm. De longitud <= 104
  • -105 <= números [i] <= 105
  • 0 <= i <= j <núm. De longitud
  • Llame al método sumRange hasta 104 veces

Ideas

Cuando se inicializa el constructor, se calcula una matriz de suma de prefijo. Cada vez que se calcula la suma de área, se puede restar la suma de prefijo de las dos posiciones para obtener la suma de área. Consulte el código para obtener más detalles.

Complejidad del tiempo: O (n) O (n)O ( n )

Código AC

class NumArray {
    
    
public:
    vector<int> sum;
    
    NumArray(vector<int>& nums) {
    
    
        sum.push_back(0);
        for(auto num : nums) {
    
    
            sum.push_back(sum.back()+num);
        }    
    }
    
    int sumRange(int i, int j) {
    
    
        return sum[j+1]-sum[i];
    }
};

/**
 * Your NumArray object will be instantiated and called as such:
 * NumArray* obj = new NumArray(nums);
 * int param_1 = obj->sumRange(i,j);
 */

Supongo que te gusta

Origin blog.csdn.net/Krone_/article/details/114262097
Recomendado
Clasificación