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

求助:排查furthestAirport方法返回空ArrayList的问题

排查你的furthestAirport方法返回空列表的问题

我先仔细捋了一遍你的代码,这里有几个关键问题可能导致方法返回空ArrayList,咱们一个个拆解来看:

  • 初始max值设置不合理
    你把max初始化为2,但如果从出发机场到所有可达目的地的最短路径顶点数(也就是temp.size())都没法达到或超过这个值,max就永远不会更新,后续的筛选逻辑自然找不到符合条件的目的地。比如如果所有可达目的地都是直连(路径顶点数刚好是2),这没问题,但如果所有其他机场都不可达(shortestPaths返回空集合),那tempList会一直为空,最终result也为空。

  • 路径长度的计算可能和你的预期不符
    你用temp.size()作为路径长度,但这里的size()是路径里的顶点数量。如果你的“最远”是指中转的边数(比如直连是1条边,中转一次是2条边),那你应该用temp.size() - 1来计算。如果搞混了顶点数和边数的逻辑,会导致max的判断完全错误,进而筛选不出正确的目的地。

  • stationKeys的完整性存疑
    你遍历的stationKeys是不是包含了所有的机场顶点?如果这个集合本身为空,或者漏掉了某些可达的目的地机场,那循环根本不会处理这些目标,自然不会有结果加入result。

  • 双循环逻辑的冗余与潜在问题
    你的代码分两次遍历stationKeys,第一次收集可能符合条件的endKey,第二次再筛选。但第一次循环中,当max被更新为更大的值时,tempList里之前的endKey其实已经不符合新的max了,但你没有清空tempList——虽然这不会影响最终结果,但会降低效率。更关键的是,如果初始max设置过大,所有路径长度都小于它,那tempList会一直为空,result也跟着为空。

修复建议

针对这些问题,你可以做以下调整,优化后的逻辑更简洁高效:

static ArrayList<Integer> furthestAirport(int departingAirport) {
    // 初始化max为0,确保第一条可达路径就能触发更新
    int maxPathLength = 0;
    ArrayList<Integer> result = new ArrayList<>();
    
    for (int endKey : stationKeys) {
        if (departingAirport == endKey) {
            continue; // 跳过出发机场本身
        }
        HashSet<ArrayList<Integer>> shortestPaths = g.shortestPaths(departingAirport, endKey);
        if (shortestPaths.isEmpty()) {
            continue; // 跳过不可达的目的地
        }
        // 取任意一条最短路径的长度(所有最短路径长度一致)
        int pathLength = shortestPaths.iterator().next().size();
        // 如果要统计边数,改成 pathLength - 1
        
        if (pathLength > maxPathLength) {
            // 找到更长的路径,更新max并重置结果列表
            maxPathLength = pathLength;
            result.clear();
            result.add(endKey);
        } else if (pathLength == maxPathLength) {
            // 长度相同,去重后加入结果
            if (!result.contains(endKey)) {
                result.add(endKey);
            }
        }
    }
    return result;
}

另外,你可以在循环里加些调试输出,比如打印每个endKey的路径长度、shortestPaths是否为空,这样能更快定位到底是目的地不可达,还是长度判断出了问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:32:37