c语言将数组初始化为1_LeetCode基础算法题第115篇: 将数组划分为三个等分

ddf67fe24a70a7f8727881b779f61d01.png

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后> 到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和> 精力有限,其他语言的实现有兴趣的朋友请自己尝试。初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式> 聊到大数据框架,从大数据聊到人工智能,... ...。

如果有任何问题可以在文章后评论或者私信给我。

我会持续分享下去,敬请您的关注。

LeetCode 1020. 将数组划分为三个等分(Partition Array Into Three Parts With Equal Sum)

问题描述:

给定一个A整数数组,仅当我们可以将数组分成具有相等和的三个非空部分时才返回true。具体来说,我们可以将数组划分为三部分以满足:A[0] + A[1] + ... + A[i] == A[i+1] + A[i+2] + ... + A[j-1] == A[j] + A[j-1] + ... + A[A.length - 1])。其中i+1

1. 3 <= A.length <= 50000

2. -10000 <= A[i] <= 10000

示例:

9c23b0d5b142037a916be3a404de22b1.png

C语言实现:

这道题非常简单。

A的元素都是整数,分成3个部分,如果A是满足返回true的数组,那么,它每部分的和(我们用变量t)都应该相等,也就是说,整个数组的和total == 3*t。

因此我们首先可以计算A所有元素的和,如果它不可以被3整除,那么它一定返回false的。如果可以被3整除,我们继续如下的计算。

我们初始化一个变量t和c,分别用来统计每一部分的和,以及可划分的数组段的个数。从头遍历A,将元素依次累加给t,然后比较t是否等于total/3,如果相等,说明从当前这个元素开始,左边的一段连续的元素可以作为分隔的一部分,所以c加1, 然后重置t为0,开始检查后面的元素是否可以继续分隔。

如此继续下去,如果A可以分隔成3部分,c应该是等于3的。

最终代码如下:

5a90ae7aa03e9851abe7e0db40435fd5.png
6ebadd1fab8aec96cfd3d2d872312f1b.png

Java语言实现:

Java 的实现和C语言的实现一致,不再撰述。

3e5baea3cb64a5aafd87801a6332f24f.png
b4a2b64339dc0e2ebf851dff179e99d3.png

Python语言实现:

Python 的实现和C语言的实现一致,不再撰述。

502c5108fd747d86fd5e5ad901c8f656.png
a0501d963ab48486e9520e72a6ce5d48.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值