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

如何从给定数字列表中查找输入数的下一个相邻更大数

需求说明

实现从给定数字列表中,查找指定输入值对应的数值最接近的更大数,参考示例:

  • 给定数字列表:[50, 20, 40, 30, 10]
  • 输入值:15
  • 预期输出:20
实现思路

针对无序列表的通用场景,逻辑非常直接:

  • 初始化结果变量为空,用来暂存符合要求的候选值
  • 逐一遍历列表中的每个数字,跳过所有小于等于输入值的元素
  • 遇到比输入值大的元素时,如果当前还没存候选值,或者当前元素比已存的候选值更小,就更新候选值为当前元素
  • 遍历结束后,存储的候选值就是所有比输入值大的数里最小的那个,也就是要找的结果;如果候选值始终为空,说明列表中不存在比输入值大的数

如果业务场景中数字列表是提前排好序的,可以直接用二分查找优化遍历效率,时间复杂度可以从O(n)降到O(logn)。

Java 可运行实现代码
import java.util.List;

public class NextGreaterFinder {
    /**
     * 查找列表中比目标值大的最小数值
     * @param numList 待查找的数字列表
     * @param target 输入的目标数值
     * @return 符合要求的数值,不存在则返回null
     */
    public static Integer findNextGreaterNumber(List<Integer> numList, Integer target) {
        // 空值、空列表直接返回空
        if (numList == null || numList.isEmpty() || target == null) {
            return null;
        }

        Integer res = null;
        for (Integer num : numList) {
            if (num > target) {
                if (res == null || num < res) {
                    res = num;
                }
            }
        }
        return res;
    }

    public static void main(String[] args) {
        // 用题目给的示例做验证
        List<Integer> demoList = List.of(50, 20, 40, 30, 10);
        Integer input = 15;
        System.out.println(findNextGreaterNumber(demoList, input)); 
        // 控制台输出20,和预期结果一致
    }
}
复杂度说明
  • 通用无序列表实现的时间复杂度为O(n),n为列表长度,仅需一次遍历即可得到结果
  • 空间复杂度为O(1),仅需固定的临时变量存储结果,不随列表长度增长占用额外内存

内容的提问来源于stack exchange,提问作者Shivaraj Sajjan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:09:16