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

如何在有序Row列表中高效查找b值刚好大于x的元素?

解决方案:利用二分查找实现高效查找

当然有更高效的方案——二分查找,完全不需要遍历整个列表。

核心原因

题目中明确说明"按a排序时b也自动排序",这意味着整个列表的b值本身是单调有序序列(结合需求来看应为递增),而二分查找的核心前提就是数据有序,刚好匹配这个场景。

具体实现思路

直接基于b值进行二分查找,目标是找到第一个b值大于x的Row记录,步骤如下:

  • 初始化左指针left = 0,右指针right = rows.size() - 1
  • 初始化结果变量result = null
  • 循环执行直到left > right:
    1. 计算中间索引mid = left + (right - left) / 2(避免整数溢出)
    2. 如果rows[mid].b > x:
      • 把当前rows[mid]设为候选结果(它符合b>x,但可能左边还有更早的符合条件的记录)
      • 调整右指针right = mid - 1,继续向左查找
    3. 否则(rows[mid].b <= x):
      • 调整左指针left = mid + 1,向右寻找更大的b值
  • 循环结束后,result就是第一个b值刚好大于x的Row记录

伪代码示例

Row findFirstBGreaterThanX(int x, List<Row> rows) {
    int left = 0;
    int right = rows.size() - 1;
    Row result = null;
    
    while (left <= right) {
        int mid = left + (right - left) / 2;
        Row current = rows.get(mid);
        
        if (current.b > x) {
            result = current;
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    
    return result;
}

效率对比

遍历的时间复杂度是O(n),1000条数据最多需要1000次比较;而二分查找的时间复杂度是O(log n),1000条数据仅需约10次比较,效率提升非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:15:18