rust实现两数之和

518 阅读1分钟

最近rust基础的一些知识学的差不多了,就想着练习一下,解决leetcode的算法问题无疑是一个不错的选择 ,可是想的很好,用rust写起来确实挺麻烦(我太菜了。。)。由于没有注意到一些细节,就导致了各种编译出错,emmmmmm

image.png

以下代码已通过leetcode

use std::collections::HashMap;

impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
        let mut v:Vec<i32> = Vec::new();
        let mut temp = 0;
        let mut sub = 0;
        let mut map:HashMap<i32,i32> = HashMap::new();
        
        for item in &nums{
            temp = target - item;
            
            if map.contains_key(&temp){
            
                match map.get(&temp){
                    Some(value) => {
                        v.push(*value);
                    }
                    
                    None => {
                        
                    }
                }
                v.push(sub);
                
                break;
            }else{
                map.insert(*item,sub);
            }
            
            sub += 1;
            
        }
        
        v
    }
}

image.png

在我刚开始写的时候,想不就是简单的两数之和嘛,随便拿下,于是,在Rust Playground (rust-lang.org)上面各种问题层出不穷,最要命的当然还是HashMap的一些用法问题,比如get方法,我原本以为就像js那样,get直接获取一个键的对应的值,

if map.contains_key(&temp){
        v.push(map.get(&temp));
        v.push(sub);
            
        break;
}else{
        map.insert(item,sub);
}

可是一直报类型错误

image.png 然后我尝试解决这个问题,在查看资料时,发现了问题所在 Rust collections - Rust 基础教程 - 简单教程,简单编程 (twle.cn),get方法返回的是一个结构体,然后,问题就迎刃而解了。

image.png