如何从给定数字列表中查找输入数的下一个相邻更大数
需求说明
实现从给定数字列表中,查找指定输入值对应的数值最接近的更大数,参考示例:
- 给定数字列表:
[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
相关产品推荐
相关产品推荐

