如何实现数组连续求差直至仅剩单个元素的算法?
Java数组连续求差至单元素的实现方案
给定数组:
int[] array = {5, 7, 16, 3, 2};
我们需要通过每一轮计算相邻元素的差值(后元素 - 前元素),逐步缩小数组长度,直到仅剩单个元素,最终结果为63。以下是两种可行的实现方式:
一、迭代实现
思路
循环迭代处理数组:每一轮基于当前数组生成新数组,新数组长度为原数组长度减1,每个元素为原数组中相邻两个元素的差值(后减前);重复此过程直到数组长度为1。
代码实现
public class ArrayDifference { public static void main(String[] args) { int[] array = {5, 7, 16, 3, 2}; int result = computeFinalDifference(array); System.out.println("最终结果:" + result); // 输出63 } private static int computeFinalDifference(int[] arr) { if (arr.length == 1) { return arr[0]; } int currentLength = arr.length; while (currentLength > 1) { int[] newArr = new int[currentLength - 1]; for (int i = 0; i < currentLength - 1; i++) { newArr[i] = arr[i + 1] - arr[i]; } arr = newArr; currentLength = arr.length; } return arr[0]; } }
二、递归实现
思路
以数组长度为1作为递归终止条件,直接返回该元素;否则生成当前数组的差值数组,递归调用自身处理新数组,直到触发终止条件。
代码实现
public class ArrayDifferenceRecursive { public static void main(String[] args) { int[] array = {5, 7, 16, 3, 2}; int result = computeRecursiveDifference(array); System.out.println("最终结果:" + result); // 输出63 } private static int computeRecursiveDifference(int[] arr) { if (arr.length == 1) { return arr[0]; } int[] diffArr = new int[arr.length - 1]; for (int i = 0; i < diffArr.length; i++) { diffArr[i] = arr[i + 1] - arr[i]; } return computeRecursiveDifference(diffArr); } }
验证说明
两种实现都会严格按照题目步骤计算:
- 初始数组 → {5, 7, 16, 3, 2}
- 第1轮 → {2, 9, -13, -1}
- 第2轮 → {7, -22, 12}
- 第3轮 → {-29, 34}
- 第4轮 → {63}
最终返回结果63,完全符合需求。
内容的提问来源于stack exchange,提问作者Siri
相关产品推荐
相关产品推荐

