两数之和

  • 这个问题如果使用最简单的办法是暴力破解,它的运行时间会比较长,而且时间复杂度为O(n^2)
  • 使用哈希表处理较为方便: 哈希表 通过`key`来锁定每一个值对应的下标,也就是说哈希表要设置成`hash(val,idx)`,索引在后,hash在前的方法,通过target 的方法来对照HashMap,查找对应的索引,将正在索引 的idx和HashMap对应的idx返回。
1
2
3
4
5
6
7
8
9
10
11
12
13
use std::collections::HashMap;
impl Solution {
pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
let mut hash = HashMap::with_capacity(nums.len());
for (idx,&val) in nums.iter().enumerate() {
if let Some(&find) = hash.get(&(target - val)) {
return vec![find as i32,idx as i32]
}
hash.insert(val,idx);
}
panic!("Cannot find the solution");
}
}