今天看过一些视频和博客之后,我决定换个方法刷题:
把LeetCode 1~150号题目按顺序刷下去。
自己动手,十分钟想不出来解法就看讨论区,向优秀的同学学习,理解之后自己敲一遍,再在这里从题目分析到解答整个过一遍(代码再敲一遍)。
这道题我完全是暴力求解,两重循环。
看了其他同学的方法,有只用一个循环的,用字典的,也有用hashmap的。我目前还完全不懂hashmap,但觉得用一重循环和字典都比较容易理解,所以就写一下一重循环和字典的解法:
1、一重循环
#一重循环,就是检验target减去第一个数的结果是否在nums中:
def twoSum(self, nums: List[int], target: int) -> List[int]:
n = len(nums)
for x in range(n):
y = target - x
if y in nums:
return [x,nums.index(y)]
break
else:
continue
#写着写着,发现有个问题:当y=nums[x]时就出错啦
#比如测试用例[2,2,4] 4就通不过
#之后再来解决吧...
此外,还学会了一个方法enumerate():
enumerate(sequence, [start=0])
参数:sequence – 一个序列、迭代器或其他支持迭代对象。
start – 下标起始位置。
ss = ['gaga','xixi','haha']
for i,j in enumerate(ss):
print i, j
#结果输出:
0 gaga
1 xixi
2 haha
2、字典
#字典
#这段是在VSCode里面编辑的,不是很理解为什么输出的时候i要放在后面
#以及那个else的写法
dict1 = {}
n = len(nums)
for i in range(n):
#dict1[nums[i]] = i
if target - nums[i] in dict1:
print(dict1[target-nums[i]],i)
else:
dict1[nums[i]] = i
3、哈希
通过这个解法也了解了一点哈希表的相关知识
hashmap = {}
for i,num in enumerate(nums):#i是下标,num是值
if hashmap.get(target - num) is not None:
print([hashmap.get(target - num),i])
hashmap[num] = i
今日感想:
如果解题有段位:
青铜:暴力
白银:稍微优化
黄金:多种解法
王者:解法多样,考虑全面,题解表述清晰易懂
而我,不会玩游戏…
照这个速度…我何时能够刷完剩下的149题??
要完全弄懂一道题,真难,今天这题可能80%吧?…
这也反映了我的性格,从来都是 “差不多就得了”
我晕!