1小时放弃Rust(2): 两数之和

发布于:2024-12-21 ⋅ 阅读:(12) ⋅ 点赞:(0)

1. 目的

陈越姥姥说,ACM拿奖的人有两类,一类是 NOIP 搞了好几年的,另一类是大学才开始搞 ACM 但是专注度远超常人的人。

学习 Rust 大概也是需要高度的专注度。让我试一下 ACM 的入门题目 A+B 吧!

2. 题目地址

https://leetcode.cn/problems/two-sum/

3. 创建工程

cd ~/play/rust
cargo new two-sum
cd two-sum
nvim src/main.rs

4. 抄写暴力求解的答案

学习的第一步就是抄写标准答案, 并且这个解法还应当是不费脑子的。 循序渐进才符合认知。

https://leetcode.cn/problems/two-sum/solutions/2326193/dong-hua-cong-liang-shu-zhi-he-zhong-wo-0yvmj/

struct Solution;

impl Solution
{
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32>
    {
        for i in 0..nums.len()
        {
            for j in j+1..nums.len()
            {
                if nums[i] + nums[j] == target
                {
                    return vec![i as i32, j as i32];
                }
            }
        }
        unreachable!()
    }
}

fn main()
{
    let nums = vec![2, 7, 11, 16];
    let target = 9;

    let result = Solution::two_sum(nums, target);

    println!("{:?}", result);
}

struct Solution 是在干啥

定义了一个空的结构体 Solution。

impl Solution 是在干事

为结构体 Solution 定义方法或关联函数。

vec! 是啥

vec! 是一个宏, 用来快速创建一个 Vec<T>

unreachable!() 是在干啥

unreachable!() 是一个宏,用于标记程序中不可能到达的代码路径。如果运行到了它, 会触发一个运行时错误,并终止错误。

对应的 C++ 代码

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for (int i=0; i<nums.size(); i++)
        {
            for (int j=i+1; j<nums.size(); j++)
            {
                if (nums[i] + nums[j] == target)
                {
                    return {i, j};
                }
            }
        }
        return {};
    }
};

总结

好,不贪多,这次稍微接触练习了 rust 的 vec,用暴力方式做了 two-sum 的求解: 两重循环分别遍历数组。