力扣每日一题(11)将数组分成和相等的三个部分

将数组分成和相等的三个部分

1.判断数组能否分成和相等的三个部分
2.找到数组中的两个分界点

步骤一:

求出数组的和,是否可以被3整除,若不能,返回False;反之,进行下一步。

步骤二:

求出两个不相等的索引 i 和 j ,且(j > i),将数组分为三个部分(注意第二个索引不能是数组末尾,即j != len(A)-1)。因为i 和 j将数组分为相等的三部分,那么每一个部分的累加和为数组的和除以3,即sum(A) / 3.

只需扫描数组,求累加和,判断当前值是否为sum(A)/3 * k,其中k为第i个索引。


```python
cnt = 0     #数组累加和,初始值为0
for i in A:
    cnt += i
if cnt % 3 != 0:    #如果不能被3整除,返回False
    return False
cnt /= 3         #此为每一个单独部分的和
ans = 0          #用来计算累加和      
k = 1            #得到已求得的索引个数
i = 0        
while i < len(A):
    ans += A[i]
    if ans == k * cnt:
        k += 1
    if k == 3 and i < len(A)-1:  #当k==3时,意为找到第二个索引,且当前索引小于数组末尾,return True
        return True
    i += 1
return False

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值