План курса / Все задачи / Алгоритмы и структуры данных
Индекс равных сумм
средне
# решено
Дан массив целых чисел nums. Нужно найти индекс элемента, такой что суммы всех элементов справа и слева от этого элемента равны.
Если индекс указывает на самый первый элемент массива, то считаем сумму всех элементов слева равной нулю. Это правило также применимо к последнему индексу.
Если в массиве нет такого индекса, то нужно вернуть -1.
public class Solution
{
public static int PivotIndex(List<int> nums)
{
// сумма всех элементов массива nums
int numsSum = 0;
foreach (int num in nums)
{
numsSum += num;
}
// текущая сумма всех элементов слева
int leftSum = 0;
for (int i = 0; i < nums.Count; i++)
{
int num = nums[i];
// rightSum - сумма элементов справа
// 0 1 2 3 4 5
// i
// если i = 2, то leftSum = 0 + 1
// rightSum = 3 + 4 + 5
int rightSum = numsSum - leftSum - num;
if (leftSum == rightSum)
{
return i;
}
leftSum += num;
}
return -1;
}
}
#include <vector>
using namespace std;
int pivotIndex(const vector<int>& nums) {
// сумма всех элементов массива nums
int numsSum = 0;
for (int num : nums) {
numsSum += num;
}
// текущая сумма всех элементов слева
int leftSum = 0;
for (int i = 0; i < nums.size(); i++) {
int num = nums[i];
// rightSum - сумма элементов справа
// 0 1 2 3 4 5
// i
// если i = 2, то leftSum = 0 + 1
// rightSum = 3 + 4 + 5
int rightSum = numsSum - leftSum - num;
if (leftSum == rightSum) {
return i;
}
leftSum += num;
}
return -1;
}
package main
func pivotIndex(nums []int) int {
// сумма всех элементов массива nums
numsSum := 0
for _, num := range nums {
numsSum += num
}
// текущая сумма всех элементов слева
leftSum := 0
for i, num := range nums {
// rightSum - сумма элементов справа
// 0 1 2 3 4 5
// i
// если i = 2, то leftSum = 0 + 1
// rightSum = 3 + 4 + 5
rightSum := numsSum - leftSum - num
if leftSum == rightSum {
return i
}
leftSum += num
}
return -1
}
package main
func pivotIndex(nums []int) int {
// сумма всех элементов массива nums
numsSum := 0
for _, num := range nums {
numsSum += num
}
// текущая сумма всех элементов слева
leftSum := 0
for i, num := range nums {
// rightSum - сумма элементов справа
// 0 1 2 3 4 5
// i
// если i = 2, то leftSum = 0 + 1
// rightSum = 3 + 4 + 5
rightSum := numsSum - leftSum - num
if leftSum == rightSum {
return i
}
leftSum += num
}
return -1
}
from typing import *
def pivot_index(nums: List[int]) -> int:
# сумма всех элементов массива nums
numsSum = sum(nums)
# текущая сумма всех элементов слева
leftSum = 0
for i, num in enumerate(nums):
# rightSum - сумма элементов справа
# 0 1 2 3 4 5
# i
# если i = 2, то leftSum = 0 + 1
# rightSum = 3 + 4 + 5
rightSum = numsSum - leftSum - num
if leftSum == rightSum:
return i
leftSum += num
return -1
export function pivotIndex(nums) {
// сумма всех элементов массива nums
const numsSum = nums.reduce((acc, num) => acc + num, 0);
// текущая сумма всех элементов слева
let leftSum = 0;
for (let i = 0; i < nums.length; i++) {
const num = nums[i];
// rightSum - сумма элементов справа
// 0 1 2 3 4 5
// i
// если i = 2, то leftSum = 0 + 1
// rightSum = 3 + 4 + 5
const rightSum = numsSum - leftSum - num;
if (leftSum === rightSum) {
return i;
}
leftSum += num;
}
return -1;
}