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 的求解: 两重循环分别遍历数组。