Сложность: 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 {
canThreePartsEqualSum(arr) {
const totalSum = arr.reduce((sum, num) => sum + num, 0);
if (totalSum % 3 !== 0) {
return false;
}
const target = totalSum / 3;
let partSum = 0, count = 0;
for (let i = 0; i < arr.length; i++) {
partSum += arr[i];
if (partSum === target) {
count++;
partSum = 0;
if (count === 2 && i < arr.length - 1) {
return true;
}
}
}
return false;
}
}Ставь 👍 и забирай 📚 Базу знаний