1. 两数之和【LeetCode 刷题日记】
记录自己从零开始刷 LeetCode,提高自己的数据结构与算法能力,为了获得更好的工作机会
#数组
#简单
题目:1. 两数之和
地址:https://leetcode.cn/problems/two-sum/
解题情况
- 读题后,自行解答出
- 第一次运行,提示报错,测试用例只通过了一个,修改代码后,测试用例全部通过
我的解答
- 解法:暴力解法,两次 for 循环
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
javascript
let twoSum = function (nums, target) {
for (let i = 0; i < nums.length; i++) {
for (let j = 0; j < nums.length; j++) {
if (nums[i] + nums[j] === target && i !== j) {
return [i, j];
}
}
}
};
参考优秀题解
- 解法:哈希表
- 时间复杂度:O(n)
- 空间复杂度:O(n)
javascript
let twoSum = function (nums, target) {
let map = new Map();
for (let i = 0; i < nums.length; i++) {
let diff = target - nums[i];
if (map.has(diff)) {
return [map.get(diff), i];
} else {
map.set(nums[i], i);
}
}
return [];
};
复盘
- 自己数据结构与算法能力比较差,是我一直以来的痛点,这个地方我也是知道的,但是可能工作中用的比较少,所以经常性的不重视和逃避
- 第一反应能想到的就是暴力解法,双重 for 循环,其他解法想不到的原因,是自己接触的比较少,后续继续踏实练习
- 看了人家用哈希表的解法,真的觉得牛,很有趣的解法和思路,是自己以前没想过的解法,学到了
- 以前写技术博客,担心自己写的文章不太好,不太敢写,但是我觉得这样是不好的,起码要先开始写再追求优秀,完成好过完美,开始做吧