Сложность: easy
Если задан массив целых чисел arr, верните true, если мы можем разбить массив на три непустые части с равными суммами. Формально, мы можем разбить массив, если можем найти индексы i + 1 < j с (arr[0] + arr[1] + ... + arr[i] == arr[i + 1] + arr[i + 2] + ... + arr[j - 1] == arr[j] + arr[j + 1] + ... + arr[arr.length - 1])
Пример:
Input: arr = [0,2,1,-6,6,-7,9,1,2,0,1]
Output: true
👨💻 Алгоритм:
1⃣Вычисление общей суммы:
Вычислите общую сумму всех элементов массива. Если эта сумма не делится на 3 без остатка, вернуть false, так как невозможно разбить массив на три части с равной суммой.
2⃣Поиск первой и второй части:
Итерируйте по массиву и ищите первую часть с суммой, равной одной трети от общей суммы. Продолжайте итерацию для поиска второй части с такой же суммой.
Убедитесь, что между первой и второй частью есть хотя бы один элемент.
3⃣Проверка третьей части:
Убедитесь, что оставшаяся часть массива также имеет ту же сумму, что и две найденные части. Если да, вернуть true, иначе false.
😎 Решение:
class Solution {
func canThreePartsEqualSum(_ arr: [Int]) -> Bool {
let totalSum = arr.reduce(0, +)
if totalSum % 3 != 0 {
return false
}
let target = totalSum / 3
var partSum = 0
var count = 0
let n = arr.count
for i in 0..<n {
partSum += arr[i]
if partSum == target {
count += 1
partSum = 0
if count == 2 && i < n - 1 {
return true
}
}
}
return false
}
}Ставь 👍 и забирай 📚 Базу знаний