Сложность: 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.
😎 Решение:
public class Solution {
public bool CanThreePartsEqualSum(int[] arr) {
int totalSum = arr.Sum();
if (totalSum % 3 != 0) {
return false;
}
int target = totalSum / 3, partSum = 0, count = 0, n = arr.Length;
for (int i = 0; i < n; i++) {
partSum += arr[i];
if (partSum == target) {
count++;
partSum = 0;
if (count == 2 && i < n - 1) {
return true;
}
}
}
return false;
}
}Ставь 👍 и забирай 📚 Базу знаний