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

Rust如何检查Vec<isize>中是否存在两个元素相加等于指定目标值

你的实现思路整体可行,但需要调整所有权处理和遍历逻辑,具体修改如下:

原有代码的核心问题

  1. 你使用了into_iter()直接消费了contents向量的所有权,后续在any闭包中无法再访问contents的内容,会直接触发所有权编译错误
  2. 没有控制内层遍历的范围,直接遍历全量元素会出现单个元素重复使用的问题(比如目标值为200、数组中存在100的场景下,会误判为存在符合条件的两个元素)

暴力解法实现(适合小数据量)

fn check_for_factors(contents: &[isize], target: isize) -> bool {
    contents
        .iter()
        .enumerate()
        .any(|(i, &x)| {
            // 仅遍历当前元素之后的切片,避免重复匹配和单元素复用
            contents[i + 1..].iter().any(|&y| x + y == target)
        })
}

调用方式如下:

let input = "12
  122
  100
  4444
  34
  3
  66
  78
  9";

let contents: Vec<isize> = input.lines()
    .map(|l| l.trim().parse().unwrap())
    .collect();

// 输出false,你提供的测试用例中不存在两个元素相加等于300的情况
println!("{}", check_for_factors(&contents, 300));

哈希集合优化实现(适合大数据量,时间复杂度O(n))

如果数组元素较多,暴力解法的O(n²)时间复杂度性能不足,可以用哈希集合存储已遍历过的元素,将时间复杂度降到O(n):

use std::collections::HashSet;

fn check_for_factors_fast(contents: &[isize], target: isize) -> bool {
    let mut seen = HashSet::new();
    for &num in contents {
        let complement = target - num;
        if seen.contains(&complement) {
            return true;
        }
        seen.insert(num);
    }
    false
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:54:00