记录自己从零开始刷 LeetCode,提高自己的数据结构与算法能力,为了获得更好的工作机会
#数组 #简单
题目:1. 两数之和
地址:leetcode.cn/problems/tw…
解题情况
- 读题后,自行解答出
- 第一次运行,提示报错,测试用例只通过了一个,修改代码后,测试用例全部通过
我的解答
- 解法:暴力解法,两次 for 循环
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
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)
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 循环,其他解法想不到的原因,是自己接触的比较少,后续继续踏实练习
- 看了人家用哈希表的解法,真的觉得牛,很有趣的解法和思路,是自己以前没想过的解法,学到了
- 以前写技术博客,担心自己写的文章不太好,不太敢写,但是我觉得这样是不好的,起码要先开始写再追求优秀,完成好过完美,开始做吧