《Java面试试题》找出前半部分数组和后半部分数组之和相同的索引

该博客介绍了一道Java面试题,要求找出数组中一个索引,使得该索引之前元素的和等于之后元素的和。通过设置双指针分别从数组开头和结尾开始累加,逐步调整直至找到符合条件的索引。

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

描述:一个数组,前半部分之和和后半部分之和正好相等,找出中间的索引值。
You are given an array of numbers.
Find out the array index or position where sum of numbers preceding the index is equals to sum of numbers succeeding the index.
输出:
Starting from index 0, adding numbers till index 2 and adding rest of the numbers can be equal
代码部分:

package test;

import java.util.ArrayList;

/*
 *  You are given an array of numbers. 
 *  Find out the array index or position where sum of numbers 
 *  preceding the index is equals to sum of numbers succeeding the index. 
 */
/*
 *  Example: Array: 2, 4, 4, 5, 4 ,1
 *  2 + 4 + 4 = 5 + 4 + 1
 *  Means: from Index 0 to Index 2 where sum is equals to the following's summation.
 */
public class FindMiddleIndex {
    public static void main(String[] args) throws Exception {
        ArrayList<Integer> numberArrayList = new ArrayList<Integer>();
        numberArrayList.add(1);
        numberArrayList.add(8);
        numberArrayList.add(3);
        numberArrayList.add(3);
        numberArrayList.add(3);
        FindMiddleIndex findIndex = new FindMiddleIndex();
        int middle = findIndex.findMiddlePosition(numberArrayList);
        System.out.println("From Index 0 to Index " + middle + " and adding rest of the numbers can be equal");
    }

    public int findMiddlePosition(ArrayList<Integer> numberList) throws Exception {
        int lastIndex = numberList.size() - 1, firstIndex = 0;
        int sumLeft = 0;
        int sumRight = 0;
        while (true) {
            if (sumLeft < sumRight) {
                sumLeft += numberList.get(firstIndex++);
            } else {
                sumRight += numberList.get(lastIndex--);
            }
            if (firstIndex > lastIndex) {
                if (sumLeft == sumRight) {
                    break;
                } else {
                    throw new Exception("Enter a proper number list!!!");
                }
            }
        }
        return lastIndex;
    }
}

要点:
1. 定义两个指针,一个指向开头,一个指向结尾。
2. 用控制语句,对前半部分的相加和后半部分相加。
3. 找到最终的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值