![ddf67fe24a70a7f8727881b779f61d01.png](https://img-blog.csdnimg.cn/img_convert/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](https://img-blog.csdnimg.cn/img_convert/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](https://img-blog.csdnimg.cn/img_convert/5a90ae7aa03e9851abe7e0db40435fd5.png)
![6ebadd1fab8aec96cfd3d2d872312f1b.png](https://img-blog.csdnimg.cn/img_convert/6ebadd1fab8aec96cfd3d2d872312f1b.png)
Java语言实现:
Java 的实现和C语言的实现一致,不再撰述。
![3e5baea3cb64a5aafd87801a6332f24f.png](https://img-blog.csdnimg.cn/img_convert/3e5baea3cb64a5aafd87801a6332f24f.png)
![b4a2b64339dc0e2ebf851dff179e99d3.png](https://img-blog.csdnimg.cn/img_convert/b4a2b64339dc0e2ebf851dff179e99d3.png)
Python语言实现:
Python 的实现和C语言的实现一致,不再撰述。
![502c5108fd747d86fd5e5ad901c8f656.png](https://img-blog.csdnimg.cn/img_convert/502c5108fd747d86fd5e5ad901c8f656.png)
![a0501d963ab48486e9520e72a6ce5d48.png](https://img-blog.csdnimg.cn/img_convert/a0501d963ab48486e9520e72a6ce5d48.png)