1013. 将数组分成和相等的三个部分 - 力扣(LeetCode)
可以用贪心算法来解决这个问题。思路如下:
-
计算数组的总和
sum
,如果sum
不能被 3 整除,则直接返回false
。 -
目标是找到三段子数组,每段的和都等于
target = sum / 3
。 -
通过遍历数组,累加当前和
current_sum
,每当current_sum
达到target
,就计数count++
,然后重置current_sum
为 0。 -
如果能找到至少 3 段符合条件的子数组,则返回
true
,否则返回false
。
实现代码如下:
def canThreePartsEqualSum(arr):
total = sum(arr)
if total % 3 != 0:
return False # 总和不能被3整除,无法三等分
target = total // 3
count, current_sum = 0, 0
for i in range(len(arr)):
current_sum += arr[i]
if current_sum == target:
count += 1
current_sum = 0
if count == 2 and i < len(arr) - 1:
return True # 找到前两部分,剩余部分必然满足
return False # 没有找到足够的分割点
复杂度分析:
-
时间复杂度: O(N),只需遍历一次数组。
-
空间复杂度: O(1),只使用了常数额外空间。
这个方法利用了贪心思想:只要找到前两部分满足 target
,剩下的部分自然也是 target
,所以可以提前返回 True
,避免不必要的计算。