问题
1:Bad operand types for binary operator ‘&&’
eg:
if(leftsum==sum/3&&rightsum==sum/3)
&&是逻辑运算符,只能针对boolean变量进行逻辑运算。(boolean型变量:在java中boolean值只能是true和false。)
&是进行位与运算。
然鹅这里&&和&并没有区别。。。。
代码及注释部分转自leetcode1013题解-https://leetcode-cn.com/problems/partition-array-into-three-parts-with-equal-sum/solution/java-shi-yong-shuang-zhi-zhen-by-sugar-31/
代码:
1.数组可以分成和相等的三部分,每部分是总和的三分之一,但要被整除,不整除要返回false.
2.双指针法,从左右两边分别遍历,如果左和等于右和等于总和的三分之一,那么中间之和也等于三分之一。
3.循环时,left+1<right而不是left<right.避免数组中只有两部分和相等的情况,比如[1,-1,1,-1]。
- java:
class Solution {
public boolean canThreePartsEqualSum(int[] A) {
int sum=0
for( int i:A)
{ sum+=i; }
if(sum%3!=0)
{return false;}
int left=0;
int leftsum=A[left];
int right=A.length-1;
int rightsum=A[right];
while(left+1<right){
if(leftsum==sum/3&rightsum==sum/3)
{return true;}
if(leftsum!=sum/3)
{leftsum+=A[++left];}
if(rightsum!=sum/3)
{rightsum+=A[--right];}}
return false;
}}
- C:
bool canThreePartsEqualSum(int* A, int ASize){
int sum=0;
for( int i=0;i<ASize;i++)
{
sum+=A[i];
}
if(sum%3!=0)
{
return false;
}
int left=0;
int leftsum=A[left];
int right=ASize-1;
int rightsum=A[right];
while(left+1<right)
{
if(leftsum==sum/3&rightsum==sum/3)
{
return true;
}
if(leftsum!=sum/3)
{
leftsum+=A[++left];
}
if(rightsum!=sum/3)
{
rightsum+=A[--right];
}
}
return false;
}