https://leetcode.com/problems/find-pivot-index Easy

Условие

Дан массив целых чисел nums. Индекс поворота — это позиция, где сумма всех чисел слева равна сумме всех чисел справа. Верните индекс поворота. Если такого индекса нет, верните -1.

Примеры

Input: [1, 7, 3, 6, 5, 6] Output: 3 Explanation: Сумма слева от индекса 3 равна 11, и сумма справа также равна 11.

Input: [1, 2, 3] Output: -1 Explanation: Нет индекса, где суммы слева и справа равны.

Input: [2, 1, -1] Output: 0 Explanation: Сумма слева от индекса 0 равна 0, и сумма справа также равна 0.

Решение

fun pivotIndex(nums: IntArray): Int {
    var totalSum = nums.sum() // Суммируем все элементы массива
    var leftSum = 0 // Инициализируем сумму слева от текущего индекса
    for (i in nums.indices) {
        // Если сумма слева равна разнице между общей суммой и текущим элементом и левой суммой
        if (leftSum == totalSum - leftSum - nums[i]) {
            return i // Возвращаем текущий индекс как индекс поворота
        }
        leftSum += nums[i] // Добавляем текущий элемент к левой сумме
    }
    return -1 // Возвращаем -1, если индекс поворота не найден
}

Временная сложность

O(n), где n — длина массива.

Пространственная сложность

O(1), так как используется только несколько дополнительных переменных.