刷题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
来拿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的和 找到了要同时去重
