classSolution{publicbooleancanThreePartsEqualSum(int[] A){boolean ans =false;int len = A.length;if(len==0)returnfalse;int left =0;int right = len-1;int sum1=A[0],sum3=A[len-1];int sum=0;//求数组的和for(int i=0;i<len;i++) sum+=A[i];//如果和不能被3整除,则不能等分if(sum%3==0){
sum=sum/3;}else{return ans;}//左指针与右指针之间至少还有一个数字while(left<right-1){if(sum1!=sum){
left++;
sum1+=A[left];}if(sum3!=sum){
right--;
sum3+=A[right];}if(left<right-1&& sum1==sum3 && sum1==sum){
ans =true;break;}}return ans;}}
题解做法:整体遍历一遍,声明flag的想法感觉也挺好。
classSolution{publicbooleancanThreePartsEqualSum(int[] A){int sum =0;for(int i: A){
sum += i;}if(sum%3!=0){// 总和不是3的倍数,直接返回falsereturnfalse;}int s =0;int flag =0;for(int i:A){
s += i;if(s == sum/3){
flag++;
s =0;}}// flag不一定等于3,例如[1,-1,1,-1,1,-1,1,-1]return flag >=3;}}
作者:sugar-31
链接:https://leetcode-cn.com/problems/partition-array-into-three-parts-with-equal-sum/solution/java-shi-yong-shuang-zhi-zhen-by-sugar-31/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。