leetcode1664: el número de esquemas para generar una matriz equilibrada (1,28 una pregunta por día)

Declaración del tema:

Se le da una matriz de enteros nums. Debe seleccionar exactamente un subíndice (los subíndices comienzan desde 0) y eliminar el elemento correspondiente. Tenga en cuenta que los subíndices de los elementos restantes pueden cambiar debido a la operación de eliminación.

Por ejemplo, si nums = [6,1,7,4,1] , entonces:

Seleccione para eliminar el subíndice 1, dejando una matriz de nums = [6,7,4,1] .
Seleccione para eliminar el subíndice 2 , dejando una matriz de nums = [6,1,4,1] .
Seleccione para quitar el subíndice 4 , dejando una matriz de nums = [6,1,7,4] .
Una matriz es una matriz balanceada si la suma de los elementos impares es igual a la suma de los elementos pares.

Devuelva la operación de eliminación, los números de matriz restantes son la cantidad de esquemas de la matriz equilibrada.

Ejemplo 1:

Entrada: nums = [2,1,6,4]
Salida: 1
Explicación:
Eliminar el subíndice 0: [1,6,4] -> Los elementos pares están subíndices: 1 + 4 = 5. El subíndice de los elementos impares es: 6. desequilibrado.
Eliminar subíndice 1: [2,6,4] -> El subíndice de los elementos pares es: 2 + 4 = 6. El subíndice de los elementos impares es: 6. balance.
Elimina el subíndice 2: [2,1,4] -> el subíndice del elemento par es: 2 + 4 = 6. Los elementos impares se subíndicen como: 1. desequilibrado.
Elimina el subíndice 3: [2,1,6] -> el subíndice del elemento par es: 2 + 6 = 8. Los elementos impares se subíndicen como: 1. desequilibrado.
Solo hay una forma de hacer que la matriz restante sea una matriz equilibrada.
Ejemplo 2:

Entrada: nums = [1,1,1]
Salida: 3
Explicación: puede eliminar cualquier elemento, y la matriz restante es una matriz equilibrada.
Ejemplo 3:

Entrada: nums = [1,2,3]
Salida: 0
Explicación: No importa qué elemento se elimine, la matriz restante no es una matriz equilibrada.
 

pista:

1 <= nums.longitud <= 1e5
1 <= nums[i] <= 1e4

Ideas para resolver problemas:

        El significado expresado en el título es fácil de entender. Es eliminar cada subíndice en el arreglo para obtener un nuevo arreglo. Si la suma de los subíndices pares en el nuevo arreglo es igual a la suma de los impares, elementos de subíndice numerados, entonces este esquema es un esquema equilibrado. , para calcular el número total de todos los esquemas de equilibrio.

        Dos métodos: en primer lugar, es más fácil pensar en una solución violenta . Después de eliminar un elemento, se obtiene una nueva matriz, y la nueva matriz se suma con subíndices pares y subíndices impares nuevamente. Si son iguales, el número de soluciones balanceadas será +1. La complejidad de tiempo es O(N*N) y la longitud de la matriz es 100000, lo que supera el límite de tiempo.

        El segundo es encontrar la suma del prefijo (similar a una ventana deslizante) Cuando se elimina un cierto elemento de subíndice en la matriz, se encontrará que el elemento de subíndice par antes del subíndice actual sigue siendo el elemento de subíndice par de la nueva matriz , mientras que el elemento de subíndice actual Los elementos con subíndice pares después del elemento con subíndice se convierten en elementos con subíndice impar, y los elementos con subíndice impar se convierten en elementos con subíndice pares. Defina la suma de los subíndices pares e impares del prefijo como 0, y la suma de los elementos del subíndice par e impar del sufijo como la suma de los elementos del subíndice par e impar en toda la matriz. Cada vez que se recorren los elementos de subíndice de la matriz, la suma de los elementos de subíndice pares e impares del prefijo y el sufijo debe cambiarse para obtener todos los números de esquema de matriz equilibrados.

Código de resolución de problemas:

class Solution {
public:
    int waysToMakeFair(vector<int>& nums) {
        int sumFrontO=0;
        int sumBcakJ=0;
        int sumAllO=0;
        int sumAllJ=0;
        int plan=0;
        for(int i=0;i<nums.size();i++)
        {
            if(i%2==0) sumAllO+=nums[i];
            else       sumAllJ+=nums[i];
        }
        for(int i=0;i<nums.size();i++)
        {
            if(i%2==0)
            {
                sumAllO-=nums[i];
                if(sumFrontO+sumAllJ==sumAllO+sumBcakJ)
                {
                    plan++;
                }
                sumFrontO+=nums[i];
            }
            else
            {
                sumAllJ-=nums[i];
                if(sumBcakJ+sumAllO==sumFrontO+sumAllJ)
                {
                    plan++;
                }
                sumBcakJ+=nums[i];
            }
        }
        return plan;
    }
};

Supongo que te gusta

Origin blog.csdn.net/m0_63743577/article/details/128782535
Recomendado
Clasificación