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

如何实现数组连续求差直至仅剩单个元素的算法?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:16:05