Rust每日一题(7)---数据结构-字典-two-nums

  • Po
  • 更新于 2022-09-02 00:05
  • 阅读 1913

Rust每日一题(7)---数据结构-字典-two-nums

Rust每日一题(7)---数据结构-字典-two-nums

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

难度: 简单

知识点

思路

核心还是分析关键操作步骤,主要有两种思路:

  1. 双层循环遍历,算法复杂度O(N^2)会超时。
  2. 必须考虑减少比较的次数,出发点就是采用Hashmap将数据值作为字典的key,index作为字典的值,这样只需要遍历两次即可:一次遍历存储字典,一次遍历数据的index读取字典值,算法复杂度O(2*N)。需要注意的是,字典的key可能会被重复值替换(如示例3),所以需要在第二次遍历的时候遍历数组的index,而不是字典的key。
    use std::collections::HashMap;
    impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
        let mut map = HashMap::new();
        for i in 0..nums.len() {
                map.insert(nums[i], i);
        }
        for key in 0..nums.len() {
            let rest = target-nums[key];
            if map.contains_key(&rest) && map[&rest] != key   {
                return vec![key as i32, map[&rest] as i32];
            }
        }
        return vec![];
    }
    }
点赞 2
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Po
Po
0xB332...C3ba
Blockchain & AI change the world!