刷题Hot100

1.两数之和

总结:

1.直接遍历两遍O(n^2) 最简单最好写

2.使用哈希表存num 使用containsKey()匹配

知识点:

1.return List to Array

return list.stream().mapToInt(Integer::intValue).toArray();

2.用到的map方法:get put containsKey

2.字母异位词分组

总结:

1.去年7月份时可以使用素数+乘积的做法哈希 但是被新加的测试用例干掉了。。。

2.正解应该是正常哈希 但是本题正常来说只有26个字母所以我们可以使用一个26长度的数组作为哈希槽来玩

有count数组统计i位置的字母出现次数 使用stringbuffer拼接以类似”a2b3c2”的格式作为key放入map中 value是一个List每次都用 getOrDefault()

来拿map中的数组统计

知识点:

StringBuffer的append toString方法

 for (String str : strs) {
            int[] counts = new int[26];
            int length = str.length();
            for (int i = 0; i < length; i++) {
                counts[str.charAt(i) - 'a']++; //charAt()方法
            }

3.最长序列

总结:

1.其实用stream的sorted和distinct 加上测x-1是不是相连就能过 nlogn

2.如果用n复杂度的话 需要用哈希表

  • 用哈希表查找这个数前面一个数是否存在,即num-1在序列中是否存在。存在那这个数肯定不是开头,直接跳过。
  • 因此只需要对每个开头的数进行循环,直到这个序列不再连续,因此复杂度是O(n)。把每个开头的序列弄出来统计最大即可

4.移动0

总结:

两个指针快慢 左指针指已完成序列 右指针指未完成 右指针指到非0就交换并且已处理的左指针++

5.盛最多水的容器

总结:

双指针秒了

6.三数之和

先排序

确定一个数 剩下的就是两数之和 第一个确定的数不可以重复

剩下的就是两个数字双指针寻找等于0的和 找到了要同时去重