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.