-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathChapter 3. Hash Table Part 2
More file actions
32 lines (23 loc) · 2.19 KB
/
Copy pathChapter 3. Hash Table Part 2
File metadata and controls
32 lines (23 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
今天的内容是Leetcode上面的四道题
454. 4Sum2
看了前面的题解,只能说如看,还是得跟着代码来分析思路
看了代码之后,整体就十分的简单了。
先用一个字典来存储A[i] + B[j]的值(这里面就是两个循环了,而且这个看似耗时的双循环貌似无法被替换掉)
这个map会记录下key和对应出现的次数value
之后在map中匹配-n3-n4的值,将满足要求的map中的value相加就行了。
这个思路确实很直接,我之前没见过可能是因为没见过类似的方法,之后再处理类似的问题的时候可以关注一下。
(感觉现在还是打基础的阶段,如何将题目或者算法上升到思想层面,则需要更多的基础,我应该以能上升到思想层面作为自己的追求)
383 Ransom Note
这道题的思路比较简单,就是维护两个数组,统计一下两个字符串中每个字符出现的次数
这里面的最后一步是比大小,就是说ransom里面的字符出现的次数都要小于magazine中对应字符出现的次数,就可以让这个ransom note成立。
这里面需要注意的点就是,python中有一行代码就可以完成所有的判断
return all(ransom_count[i] <= magazine_count[i] for i in range(26))
其中的all是判断所有的条件是否成立
15 3Sum
这道题怎么说呢,题目的难度不算简单,中等难度的label倒是也算合理。
这个题最大的难点就是在于如何去重。我的第一直觉就是先不管重复不重复,在最后一步的时候加上判断,来看看ijk是不是有相等的,非常暴力的解法,但是应该行得通。
题解中给出的一个重要的思路就是,先排序。这一步确实能够省去很多操作,之后在做到跟index无关的题目的时候可以参考这种想法。
然后再来,就是关于题解中如何去重。这一点也是基于排序之后的,如果有重复的元素,就直接跳过。在这里需要注意的是方向的问题,是需要画图才能解决的。
18. 4Sum
这道题咋说呢,思路跟3Sum的基本一致,就是多了一层循环,还是双指针的基本思路
引申的话就是5Sum,6Sum,就是多嵌套几层for循环就行了