两数之和 - Rust

2022-07-17  本文已影响0人  曾大稳丶
image.png

采用 HashMap 记录减少时间复杂度:

/// https://leetcode.cn/problems/two-sum
pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
    use std::collections::HashMap;
    use std::option::Option;

    let mut map = HashMap::with_capacity(nums.len());
    for index in 0..nums.len(){
        if let Some(k) = map.get(&(target - nums[index])){
            if *k != index {
                return vec![*k as i32,index as i32];
            }
        }else {
            map.insert(nums[index], index);
        }
    }
    panic!("not found");
}

#[cfg(test)]
mod tests {
    #[test]
    fn two_sum_test() {
        use super::two_sum;

        let nums = vec![2,11,7,15];
        let target = 9;
        let result = two_sum(nums,target);

        assert_eq!(result, vec![0,2]);
    }
}

复杂度分析
空间复杂度: O(N):主要是记录 hash 值。
时间复杂度: O(N):单次查找 O(1), 最多遍历 N 次。

上一篇下一篇

猜你喜欢

热点阅读