LeetCode Rust - 1 - 两数之和

原题:1. 两数之和 - 力扣(LeetCode)

非常经典的入门题

解一,双指针枚举

没啥好说的,所有组合尝试一次直到找到答案

pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
	for (i, l) in nums.iter().enumerate() {
		for (j, r) in nums[(i + 1)..].iter().enumerate() {
			if l + r == target { return vec![i as i32, (j + i + 1) as i32]; }
		}
	}
	return vec![]; // 编译器不知道必定会返回,确保编译通过
}

时间:$O(n^2)$ 空间:$O(1)$

解二,哈希表

非常经典的解法,遍历每个元素,对每个元素 v

  1. 新建哈希表,值指向下标 value => index 的结构
  2. 检查哈希表中是否存在 target - v 的下标
    1. 如果存在,直接返回结果
    2. 不存在则在表中记录当前值的下标
pub fn two_sum(mut nums: Vec<i32>, target: i32) -> Vec<i32> {
	use std::collections::HashMap;
	let mut map: HashMap<i32, usize> = HashMap::new();
	for (i, v) in nums.iter().enumerate() {
		match map.get(&(target - v)) {
			None => { map.insert(*v, i); },
			Some(j) => { return vec![i as i32, *j as i32]; },
		}
	}
	return vec![];
}

时间:$O(n)$ 空间:$O(n)$

[!NOTE] 性能

看了下 LeetCode 的提交信息,match 换成 if let...else 性能会好一些,原因未知

反向链接


图谱

LeetCodeObsidian我的作品技术蓝色协议(日服)FLCL无职转生~到异世界就拿出真本事~混沌武士2023-06-062023-06-102023-06-132023-07-02Antd NoteBookCPU性能天梯图CSS NoteBookGFWIndexedDB 读写地狱JS 事件循环JS 原型链JS 运算符LaTeX NoteBookLeetCode Rust - 1 - 两数之和LeetCode Rust - 122 - 买卖股票的最佳时机 IILeetCode Rust - 125 - 验证回文串LeetCode Rust - 136 - 只出现一次的数字LeetCode Rust - 189 - 轮转数组LeetCode Rust - 217 - 存在重复元素LeetCode Rust - 242 - 有效的字母异位词LeetCode Rust - 26 - 删除有序数组中的重复项LeetCode Rust - 283 - 移动零LeetCode Rust - 344 - 反转字符串LeetCode Rust - 350 - 两个数组的交集 IILeetCode Rust - 36 - 有效的数独LeetCode Rust - 387 - 字符串中的第一个唯一字符LeetCode Rust - 48 - 旋转图像LeetCode Rust - 66 - 加一LeetCode Rust - 7 - 整数反转LeetCode Rust - 8 - 字符串转换整数 (atoi)Rust NoteBookYAMLcargo 配置hugo-obsidian 元数据解析问题safari 移动端适配发布同步国际邮箱安装 mingw显卡性能天梯图注册日本邮箱科学上网第三方插件配置 Ruby 环境🤖Gmail🤖Netch🤖Obsidian Git🤖Outlook🤖Plugin Proxy🤖epub.js🤖pdf.js🤖yuè - Web 阅读器🤖加速器HomeReact18 diff 算法Vue3 diff 算法Vue3 响应式系统Vue3 渲染流程CssMarkdownReactRustViteVueWebpack下载万代南梦宫启动器下载蓝色协议注册万代南梦宫账号🤖setup CliLeetcode originLeetcode time&space