leetcode-将数组分成和相等的三个部分

问题
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;
    }

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值