你好,欢迎来到我的博客 👋

这里记录我的学习笔记、技术分享和生活感悟

碎笔

又是一个阴雨天,不大,却缠绵。 窗外的梧桐叶又落了几片,湿漉漉地贴在地面上,像是写给秋天却无人投递的信。 心里也跟着空落落的。泡好的茶忘了喝,等到想起来时已经凉透了,一如很多被搁置的心事。 人们总说要珍惜当下,可“当下”到底是什么呢?是清晨微凉的空气,是午后短暂的暖阳,还是此刻敲击键盘的、略带疲惫的指尖? 好像什么都抓住了,又好像什么都从指缝间溜走了。 就这样吧。

2025-10-16 · SJC

leetcode_1. 两数之和

两数之和代码优化记录 最初解决两数之和问题时,我写了如下代码: class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: nums_sort = sorted(nums) lens = len(nums_sort) for i in range(lens): for j in range(lens): if (i != j and nums_sort[i] + nums_sort[j] == target): return [nums.index(nums_sort[i]), lens - 1 - nums[::-1].index(nums_sort[j])] 这段代码先对数组排序,再通过双重循环遍历排序后的数组寻找和为target的两个数,最后用nums.index()和反转数组的index()定位原数组下标。但它存在明显问题:双重循环导致时间复杂度为O(n²),面对长度10⁴的数组会超时;且nums.index()仅返回第一个匹配元素下标,处理重复元素时易出错,比如nums=[2,2,3]、target=4时,可能因定位不准返回错误结果。 之后通过优化,结合哈希表和enumerate()函数,得到更高效的代码: class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: seen = {} for i, num in enumerate(nums): complement = target - num if complement in seen: return [seen[complement], i] seen[num] = i return [] 这段代码用seen字典(哈希表)存储已遍历元素及其下标,键为数字、值为对应下标;enumerate(nums)遍历数组时同时获取元素下标i和值num,无需手动维护计数器。遍历过程中,计算当前元素的补数complement=target-num,若complement在seen中,说明之前已遍历过该补数,直接返回[seen[complement], i];若不在,则将当前num和i存入seen。此代码仅遍历一次数组,时间复杂度降至O(n),且因直接存储遍历过的元素下标,处理重复元素(如nums=[2,2,3]、target=4时,会正确返回[0,1])和定位下标更准确,代码也更简洁。 两段代码对比,核心差异在于优化版本用哈希表实现快速查找(空间换时间),并借助enumerate()简化下标获取,解决了最初代码的效率和准确性问题,更符合题目数据规模要求。 1. 两数之和

2025-10-12 · SJC

简单思考

要提高效率

2025-10-10 · SJC

我的第一篇技术文章

2025-10-10 · SJC