
技术提高是一个循序渐进的过程,所以我讲的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
示例:

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的。
最终代码如下:


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


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

