Solução para o problema da soma igual dos subarranjos esquerdo e direito

A soma dos subarrays esquerdo e direito é igual

descrição do tópico

Dado um array inteiro nums, calcule o índice central do array.
O subscrito do centro da matriz é um subscrito da matriz e a soma de todos os elementos à esquerda é igual à soma de todos os elementos à direita.
Se o subscrito central estiver na extremidade esquerda da matriz, a soma dos números à esquerda é considerada 0, pois não há elementos à esquerda do subscrito. Isso também se aplica ao subscrito central na extrema direita da matriz.
Se a matriz tiver vários subscritos centrais, o mais próximo à esquerda deve ser retornado. Retorna -1 se a matriz não tiver um subscrito central.

Fonte: LeetCode
Link: https://leetcode-cn.com/problems/tvdfij

class Solution {
    
    
    public int pivotIndex(int[] nums) {
    
    
        int sum = 0, total = 0;
        int sym = 0;
        for(int i = 0; i < nums.length; i++) {
    
    
            total += nums[i];
        }
        for(int j = 1; j < nums.length; j++) {
    
    
            sum += nums[j - 1];
            if(sum == total - sum - nums[j]) {
    
    
                sym = j;
                return sym;
            } else if(sum == total - sum) {
    
    
                return sym = 0;
            } else if(sum != total - sum - nums[j] && sum != total - sum) {
    
    
                return sym = -1;
            }
        }
        return sym;
    }
}

Eu escrevi assim no começo, mas alguns casos de uso nunca passaram, então depois de ler a solução, a resposta oficial é realmente muito concisa e engenhosa (eu deveria usar mais cérebros ...) A soma do array total, o centro
subscrito Soma no lado esquerdo, total - soma - nums[i] no lado direito, quando os lados esquerdo e direito são iguais, então há: soma = total - soma - nums[i], ou seja, 2sum + nums [i] = total A solução oficial para o
problema:

class Solution {
    
    
    public int pivotIndex(int[] nums) {
    
    
        int sum = 0;
        int total = Arrays.stream(nums).sum();
        for(int i = 0; i < nums.length; i++) {
    
    
            if(2 * sum + nums[i] == total) {
    
    
                return i;
            }
            sum += nums[i];
        }
        return -1;
    }
}

passar.

Acho que você gosta

Origin blog.csdn.net/weixin_45832482/article/details/122507329
Recomendado
Clasificación