如题,
可能又要准备找工作了,虽然现在经济行情都不好,但没有办法,只能继续捡起来 leetcode 刷。但发现效率很低,特来请教一下大家,有没有比较好的实践,能够快速刷题,尤其是能够快速复习。
Anyway ,就是想看看/听听大家的想法,学习一下先进高效的方法。
谢谢
/*
* @lc app=leetcode id=1 lang=cpp
*
* [1] Two Sum
*/
// @lc code=start
class Solution {
public:
vector<int> twoSum(vector<int> &nums, int target) {
unordered_map<int, int> valToIndex;
for (int i = 0; i < nums.size(); i++) {
// 查表,看看是否有能和 nums[i] 凑出 target 的元素
int need = target - nums[i];
if (valToIndex.count(need)) {
return vector<int>{valToIndex[need], i};
}
// 存入 val -> index 的映射
valToIndex[nums[i]] = i;
}
return vector<int>{};
}
};
// @lc code=end
1
jakoer2001 333 天前
我 vscode 用的插件有测试用例,C++还支持直接 debug 。插件的标识符是 ccagml.vscode-leetcode-problem-rating
|
2
CLMan 333 天前
每个题独立的包或者模块,我刷题主用 Go ,也用过 Rust ,共存在一个项目里面。
结构如下: ``` go.mod Cargo.toml array question1 ``` |
3
CLMan 333 天前
我服了,随便按个键就自动回复了,啥设定啊。
------ 每个题独立的包或者模块,我刷题主要用 Go ,也用过 Rust ,共存在一个项目里面。 结构如下( question1,question2 替换为对应问题的 url 路径,连字符 rust 用_,go 用-): ``` go.mod Cargo.toml src/ array/ question1/ solution_test.go question2.rs mod.rs dp/ hash/ ... lib.rs ``` 示例代码( contains-duplicate-iii.rs ): ``` struct Solution {} // https://leetcode-cn.com/problems/contains-duplicate-iii/ // 参考题解: https://leetcode-cn.com/problems/contains-duplicate-iii/solution/cun-zai-zhong-fu-yuan-su-iii-by-leetcode-bbkt/ // 考点:滑动窗口、桶排序 // // 一种朴素算法是计算所有可能的差值,时间复杂度为 kN ,空间复杂度为 O(1) // // 事实上,我们可以用空间换时间来改善算法。将数域根据其值划分所属空间,使用 hash 表记录当前空间的一个值 // 在一次迭代所有值时,当前值可能: // 1. 所属空间有值,返回 true // 2. 所属上一个空间有值,两者差满足条件,返回 true // 3. 所属下一个空间有值,两者差满足条件,返回 true // 4. 将当前值记录到其空间中,同时维护窗口为大小 k:移动窗口并删除不在窗口内的值 // // // 算法时间复杂度 O(N),空间复杂度主要是 hash 表的大小:O(min(k,N)) impl Solution { fn get_id(n: i64, w: i64) -> i32 { if n >= 0 { (n / w) as i32 //0~w-1 属于 0 } else { ((n + 1) / w - 1) as i32 //-w~-1 属于 -1 } } pub fn contains_nearby_almost_duplicate(nums: Vec<i32>, k: i32, t: i32) -> bool { use std::collections::HashMap; let mut buckets: HashMap<i32, i32> = HashMap::new(); let w: i64 = t as i64 + 1; // 省略实现代码 false } } #[cfg(test)] mod tests { use crate::array::contains_duplicate_iii::Solution; #[test] fn test() { let nums = vec![2147483647, -1, 2147483647]; let k = 1; let t = 2147483647; let ans = Solution::contains_nearby_almost_duplicate(nums, k, t); assert!(!ans) } } ``` Go 版本就是需要一个单独的文件夹(包),里面代码也差不多,包括实现代码和测试代码。 只要遵循特定语言的组织结构,测试规范,缝合其它语言进去也很容易。题目介绍、解题思路,可以放到代码里面,也可以单独用 markdown 文档记录,怎么顺手怎么来。 |
4
CLMan 333 天前
https://imgur.com/a/YiUkw4T
上面丢失了层次,给个图像(这是之前没用 go mod ,后来添加了 go.mod )。 用啥都能刷吧,主要是层次清晰就 OK ,Go 和 Rust 都挺适合用 vscode 写,语言官方自带测试工具,写单元测试也容易。 个人更喜欢用 Go ,不需要任何语法负担。 至于复习,我个人刷题主要是练习题感,并没有期望面试遇到原题,复习更多是从系统的数据结构与算法知识层面。 |
5
stevenluox1 333 天前
用文档记录一个刷题记录,好用
|
6
linzhe141 333 天前
ts+vitest ,自己写单测
https://github.com/linzhe141/leetcode |