【问题标题】:Summing Array Elements Using D&C algorithm gives wrong output使用 D&C 算法对数组元素求和会给出错误的输出
【发布时间】:2021-11-29 03:17:51
【问题描述】:

你能告诉我这段代码有什么问题吗?我试图创建一个函数,该函数使用 D&C 算法计算数组元素的总和,但总是给我错误的输出。

public static long getSum(long arr[], int left, int right, long sum) {

    if (left<=right) {
        if (left==right) {

            return sum + arr[right];
        }
        int mid = (left + right) / 2;
        return  getSum(arr,  left+ 1, mid,sum + arr[left])  + getSum(arr, mid + 1, right, sum + arr[left]);
    }
    return 0;

public static void main(String[] args){
    long[] n = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
    int l = 0, r = n.length-1;
    long result = getSum(n,l,r,0);
    System.out.print(result);

【问题讨论】:

    标签: java divide-and-conquer


    【解决方案1】:

    arr[left] 被添加了两次,这需要修复,以便递归调用看起来像:

    ...
    return arr[left] + getSum(arr, left + 1, mid,   sum) 
                     + getSum(arr,  mid + 1, right, sum);
    

    此外,还可以将right 索引处的元素添加到同一行的总和中并减少该索引:

    return arr[left]  + getSum(arr, left + 1, mid, sum) 
         + arr[right] + getSum(arr,  mid + 1, right - 1, sum);
    

    【讨论】:

      猜你喜欢
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 2016-01-08
      相关资源
      最近更新 更多