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

Julia:求满足条件的列表b中最大元素索引及优化方案咨询

问题描述

给定两个Julia列表:

a = [13, 17, 11, 24, 30]
b = [10, 12, 13, 20, 28]

需要找到索引i(Julia为1-based索引),满足两个条件:

  1. a[i] - b[i] > 0
  2. b[i]是所有满足条件1的元素中的最大值

数学上等价于求argmax_{i in S} b,其中S = {i : a_i - b_i > 0},本例答案为i=5。

当前实现代码:

filter(in(findall(>(0), a .- b)), sortperm(b, rev=true))

询问是否存在更优的实现方法。

更优实现方法

方法1:筛选后求最大值索引

先筛选出符合条件的索引,再在这些索引对应的b元素中找到最大值的位置:

valid_indices = findall(x -> x > 0, a .- b)
result = valid_indices[argmax(b[valid_indices])]

优势:

  • 时间复杂度为O(n),仅需两次线性遍历(筛选有效索引、找最大值),比原方法的O(n log n)排序操作更高效。
  • 逻辑清晰,可读性更强,直接对应需求的分步逻辑。

方法2:单次遍历记录最优解

通过一次遍历完成条件检查和最大值追踪,无需额外存储所有有效索引:

max_b = -Inf
result_idx = nothing
for (i, (ai, bi)) in enumerate(zip(a, b))
    if ai - bi > 0 && bi > max_b
        max_b = bi
        result_idx = i
    end
end

优势:

  • 时间复杂度O(n),空间复杂度O(1),是理论上的最优解,适合处理超大尺寸的列表。
  • 避免了额外的数组存储,内存占用更低。

原方法的不足

原方法通过sortperm对整个b列表排序(O(n log n)时间),再过滤有效索引,效率低于上述两种线性时间方法;同时代码逻辑相对间接,可读性不如分步或单次遍历的实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:42:42