1. 程式人生 > 其它 >找到陣列的中心下標

找到陣列的中心下標

基礎演算法練習:找到陣列的中心下標

/**
 * @author JH_Y
 * @version 1.0
 * <p>
 * 找到陣列的中心下標
 */
public class FindTheCenterSubscriptOfArray {

    public static void main(String[] args) {

        /**
         *
         * 給定一個整數陣列nums,請編寫一個能夠返回陣列 “中心下標”的方法。
         *
         * 中心下標是陣列的一個下標,其左側所有元素相加的和等於右側所有元素相加的和
         * 如果陣列不存在中心下標,返回-1。如果陣列有多箇中心下標,應該返回最靠近左邊的那一個
         * 注意:中心下標可能出現在陣列的兩端。
         */
        int[] arr = {1, 7, 3, 6, 5, 6};

        System.out.println("陣列中心下標為: "+findCenterIndex(arr));
    }

    private static int findCenterIndex(int[] arr) {


        //int sum = Arrays.stream(arr).sum(); // Arrays工具類獲取陣列總和方法
        int sum = JhArr.getSum(arr); //自己的封裝方法獲取陣列總和,sum用於從右邊遞減

        int total = 0;//total用於從左邊遞加

        for (int i = 0; i < arr.length; i++) {
            // 當total為arr[0]就是1時,sum為28
            // total為 8時,sum為27
            // total為 11時,sum為20
            // total為 17時,sum為17 ==>得出索引
            total += arr[i];
            if (total == sum) return i;
            sum -= arr[i];
        }

        return -1;
    }
}