当前位置: 首页 > 知识库问答 >
问题:

对整数数组求和的最有效方法

澹台啸
2023-03-14

我正在尝试寻找一个子< code>O(n)方法来计算一个整数数组的和~~~(不是遍历< code>0 - n,我是在< code>n/2中做的)~~~我还是在O(n)中做的。

public static int sum(int[] s) {
    int length = s.length - 1;
    int half = length/2;
    int sum = 0;
    for(int i = 0; i <= half; i++) {
        System.out.println(i + " " + s[i] + " + " + s[length - i]);
        sum += s[i] + s[length - i];
    }
    return sum;
}

我的算法适用于偶数个整数,但是,当整数数为奇数时,它会将中间索引求和两次:

测试

    int[] arr = {1, 2, 3, 4, 5};
    System.out.println(sum(arr));

输出:

0 1 + 5
1 2 + 4
2 3 + 3
Sum: 18

我的问题是——对奇数的中间索引求和的最佳方法是什么?

共有2个答案

钱星华
2023-03-14

你的解是O(n),不是子O(n)。仅仅在循环中增加两个数并不能改变它。没有办法使它小于O(n ),因为你需要迭代所有的数字。

商品
2023-03-14

这仍然是O(n),即使你在一天结束时从0到n/2,你至少触摸了数组的每个元素一次。为了对一个整数数组求和,你至少可以做的是O(n),因为你必须触摸数组中的每个元素一次才能将其包含在总和中。

 类似资料:
  • 对数组中的对象进行分组的最有效的方法是什么? 例如,给定对象数组: 我正在表中显示此信息。我想通过不同的方法进行分组,但我想求和这些值。 我使用underscore.js来实现它的groupby函数,这很有帮助,但并不能完成全部任务,因为我不希望它们“拆分”,而是“合并”,更像SQL方法。 我正在寻找的将能够总计特定的值(如果请求)。 因此,如果我执行了groupby,我希望收到: 如果我执行了分

  • 本文向大家介绍对Java对象数组进行分组的最有效方法,包括了对Java对象数组进行分组的最有效方法的使用技巧和注意事项,需要的朋友参考一下 在js中对象数组上按键分组的最有效方法是使用reduce函数。 该方法在数组的每个元素上执行reducer函数(由您提供),从而产生单个输出值。 示例 输出结果 这将给出输出-

  • 问题内容: 在数组中对对象进行分组的最有效方法是什么? 例如,给定此对象数组: 我正在表格中显示此信息。我想对不同的方法进行分组,但是我想对这些值求和。 我将Underscore.js用于其groupby函数,这很有用,但并不能解决所有问题,因为我不希望它们“分裂”而是“合并”,更像SQL 方法。 我正在寻找的是能够总计特定值(如果要求)。 因此,如果我进行了groupby ,我希望收到: 如果我

  • 问题内容: 假设您有一个较大的ASCII文本文件,每行上都有一个随机的非负整数,每个整数的范围从0到1,000,000,000。文件中有100,000,000行。读取文件并计算所有整数之和的最快方法是什么? 约束:我们有10MB的RAM可以使用。该文件的大小为1GB,因此我们不想读入整个内容然后进行处理。 这是我尝试过的各种解决方案。我发现结果相当令人惊讶。 有什么我想念的更快的东西吗? 请注意:

  • 问题内容: 信不信由你,在分析当前代码后,numpy数组还原的重复操作将占用大量的运行时间。我现在拥有的是基于视图的常见方法: 还有其他方法可以更有效地执行此操作,还是我对不切实际的numpy性能的痴迷所致的幻觉? 问题答案: 创建时,您正在创建原始数组的视图。然后,您可以更改原始数组,并且视图将更新以反映所做的更改。 您是否经常需要重新创建视图?您应该能够执行以下操作: 我不是numpy专家,但