You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java解码简单编码数组:修复原数组首元素与求和错误

修复编码数组还原原数组的Java代码问题

问题说明

  • 给定编码后的数组,需还原原数组的第一个元素及所有元素的总和
  • 编码规则:
    • 编码数组的前n-1个元素为原数组相邻元素的差值:编码arr[i] = 原arr[i+1] - 原arr[i](i从0到n-2)
    • 编码数组的最后一个元素等于原数组的最后一个元素
  • 示例:原数组{2, 5, 1, 7, 9, 3}对应的编码数组为{3, -4, 6, 2, -6, 3}

错误代码及输出

代码实现

class Result {
    int output1;
    int output2;

    public Result(int output1, int output2) {
        this.output1 = output1;
        this.output2 = output2;
    }
}

public class EncodedArray {

    public static Result findOriginalFirstAndSum(int[] input1) {
        int[] res = new int[input1.length];
        res[res.length - 1] = input1[input1.length - 1];
        for (int i = input1.length - 1; i > 0; i--) {
            res[i - 1] = input1[i - 1] - res[i];
        }

        int sum = 0;
        for (int item : res) {
            sum += item;
        }

        return new Result(res[0], sum);
    }

    public static void main(String[] args) {
        int[] encodedArray = { 3, -4, 6, 2, -6, 3 };
        Result result = findOriginalFirstAndSum(encodedArray);

        System.out.println("First number in original array: " + result.output1);
        System.out.println("Sum of all numbers in original array: " + result.output2);
    }
}

当前输出

First number in the original array: -3
Sum of all numbers in original array: 12

期望输出

First number in the original array: 2
Sum of all numbers in original array: 27

问题定位与修复

错误原因

核心错误是还原原数组元素的公式搞反了:
根据编码规则编码arr[i] = 原arr[i+1] - 原arr[i],推导可得原arr[i] = 原arr[i+1] - 编码arr[i],但代码中错误地写成了res[i - 1] = input1[i - 1] - res[i],导致计算出的原数组元素全部反向。

修复后的代码

仅需修改循环内的赋值语句:

class Result {
    int output1;
    int output2;

    public Result(int output1, int output2) {
        this.output1 = output1;
        this.output2 = output2;
    }
}

public class EncodedArray {

    public static Result findOriginalFirstAndSum(int[] input1) {
        int[] res = new int[input1.length];
        // 编码数组最后一个元素等于原数组最后一个元素
        res[res.length - 1] = input1[input1.length - 1];
        // 从后往前推导原数组元素
        for (int i = input1.length - 1; i > 0; i--) {
            // 修正公式:原arr[i-1] = 原arr[i] - 编码arr[i-1]
            res[i - 1] = res[i] - input1[i - 1];
        }

        int sum = 0;
        for (int item : res) {
            sum += item;
        }

        return new Result(res[0], sum);
    }

    public static void main(String[] args) {
        int[] encodedArray = { 3, -4, 6, 2, -6, 3 };
        Result result = findOriginalFirstAndSum(encodedArray);

        System.out.println("First number in original array: " + result.output1);
        System.out.println("Sum of all numbers in original array: " + result.output2);
    }
}

验证结果

运行修复后的代码,输出与期望一致:

First number in original array: 2
Sum of all numbers in original array: 27

内容的提问来源于stack exchange,提问作者Sri Murugan G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:01:29