字数
341 字
阅读时间
2 分钟
给定一个整数数组
nums和一个整数目标值target,请你在该数组中找出 和为目标值target的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
暴力解
遍历两遍nums做匹配
时间复杂度: O(n^2)
空间复杂度: O(1)
优解
使用HashMap来进行匹配操作。每次匹配的时候可通过键值对应的方式直接获知值的查询结果,无须遍历
时间复杂度: O(n)
空间复杂度: O(n)
暴力做法每次拿两个数出来相加,和
target比较,那么花费 O(1) 的时间,只获取了 O(1) 的信息。 而哈希表做法,每次查询都能知道 O(n) 个数中是否有target − nums[j],那么花费 O(1) 的时间,就获取了 O(n) 的信息。——灵茶山艾府
Rust
use std::collections::HashMap;
impl Solution {
pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
let mut idx = HashMap::new();
for (j, &x) in nums.iter().enumerate() { // enumerate枚举
if let Some(&i) = idx.get(&(target - x)) { // 使用Some(&)拆出i
return vec![i as i32, j as i32];
}
idx.insert(x,j);
}
unreachable!();
}
}
Kiracoon