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
相关产品推荐
相关产品推荐

