1. 两数之和

每天一道Rust-LeetCode(2019-11-25)

坚持每天一道题,刷题学习Rust.

题目描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

思路:
一遍遍历,建立一个值=>下标的map
同时查找历史中是否有满足的,有的话输出
题中说了只有一对

解题过程


use std::collections::HashMap;

struct Solution {}
impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
        let mut m = HashMap::new();
        for n in nums.iter().enumerate() {
            let t2 = target - *n.1;
            if let Some(n2) = m.get(&t2) {
                return vec![*n2 as i32, n.0 as i32];
            }
            m.insert(n.1, n.0);
        }
        Vec::new()
    }
}
#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn test() {
        assert_eq!(Solution::two_sum(vec![2, 7, 11, 15], 9), vec![0, 1]);
    }
}

一点感悟

其他

欢迎关注我的github,本项目文章所有代码都可以找到.