题目:判断某个数组是否可以等分,其中分割数组的某个元素不算在内。比如:{2,5,1,1,1,1,4,7,5,2,1,7}可以四等分成{2,5}{1,1,1,4}{5,2}{7}...

本文介绍了一种用于检测整数数组中是否存在两个相邻的子数组,这两个子数组的元素之和相等的算法实现。该算法通过遍历数组并比较不同分割点前后的子数组总和来确定是否存在这样的等分子数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class HasEqualSubArray
{

public static int hasEqualSubArray(int[] input){
    //如果长度小于3则不存在等分
    if(null == input || input.length < 3){
        return -1;
    }
    
    int subSum = 0;//总和相等的字数组的总和大小
    //i作为分隔点,根据i前面的总和,判断i后面的所有字数组是否有相同的总和
    for(int i = 1; i < input.length-1; i++){
        subSum += input[i-1];

        int laterSum = 0;
        boolean hasEqualSum = true;
        for(int j = i+1; j < input.length; j++){
            laterSum = laterSum + input[j];
            if(laterSum < subSum){
                if(j == input.length-1){
                    hasEqualSum = false;
                }
                continue;
            }else if(laterSum == subSum){
                laterSum = 0;
                j++;
            }else{
                hasEqualSum = false;
                break;
            }
        }
        
        if(hasEqualSum){
            return subSum;
        }else if(i == input.length-2){
            return -1;
        }
    }
    return -1;
}

public static void main(String[] args)
{
    int[] case1 = new int[]{2,5,1,1,1,1,4,7,5,2,1,7};
    int[] case2 = new int[]{2,24,1};
    int[] case3 = new int[]{2,2,2,2,2,2,2};
    int[] case4 = new int[]{1,2,3,0,6,0,3,3};
    System.out.println(hasEqualSubArray(case1));
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值