java - 检查 o(n) 中数组左侧的总和是否等于数组右侧的总和

标签 java arrays algorithm sum time-complexity

我得到了一个数字数组(整数),如果右侧的数字总和等于 o(n) 中左侧的数字总和,我需要返回该元素。

例如数组 {1,2,2,9,3,2} 程序应该打印 9,因为 1+2+2 = 5 且 3+2=5

我附上了我的代码,但它并不复杂。 感谢您的帮助。

谢谢。

public class Program {
    public static void checkIfEqualOption1(int[] arr){
        int sumRight = 0;
        int sumLeft=0;
        //sumRight+=numbers[0];
        for (int i=0; i < arr.length; i++){
            if (i>0){
                sumRight+=arr[i-1];
                for (int j=i+1; j<arr.length; j++){
                    sumLeft+=arr[j];
                }
                if (sumRight==sumLeft){
                    System.out.println("\nFound = "+arr[i]);
                    break;
                }
            }
        }

    }

    public static void print(int[] arr){
        for (int i=0; i < arr.length; i++){
            System.out.print(arr[i] + " ");
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Hi");
        int[] numbers = {1,2,2,9,3,2};
        System.out.println("Array numbers:");
        for (int i=0; i < numbers.length; i++){
            System.out.print(numbers[i] + " ");
        }
        System.out.println("\n");
        checkIfEqualOption1(numbers);
    }
}

最佳答案

从观察开始,对于每个i

arraySum(0, i) + arraySum(i+1, n) == arrayTotal

所以

arraySum(i+1, n) == arrayTotal - arraySum(0, i);
^^^^^^^^^^^^^^^^                 ^^^^^^^^^^^^^^^
Sum on the right                 Sum on the left

在第一遍中计算arrayTotal;然后从左侧遍历数组,计算部分和。一旦到达某个位置就停止

partialSum == arrayTotal - partialSum

关于java - 检查 o(n) 中数组左侧的总和是否等于数组右侧的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41943700/

相关文章:

java - 如何以编程方式检查市场上给定 jar 的最新版本?

java - 使用 Play2 框架进行 Spring 属性注入(inject)

c++同时插入和排序 "empty"数组

arrays - 如何从 PostgreSQL 中的 json 数组中获取具有唯一编号的元素?

c++ - 在 OpenGL 中构建网格

javascript - 如何构建 Javascript 数组 Delta

java - 如何创建 .jar 文件?

java - 在 UBUNTU 中添加 JAR 类路径

c++ - 我应该删除指向静态的本地指针吗

python - 平均分配内存(或尽可能公平)