算法练习笔记
1. 有效的字母异位词 242题
其实这题思路上并没有问题,想到了两种方法。第一种是 HashMap ,第二种是用 Arrays.sort 排序。当然官方针对本地给出了更简单的解法,26个字母,放到数组的26个地方。
最大的失误,就是根本没去想 是用 HashMap 更好,还是 Arrays.sort排序方法更好。只是知道怎么做,却不知道去想哪个更好一些?为什么好?
HashMap方法的时间复杂度为 O(N),Arrays.sort方法的时间复杂度为 NlogN
知识点:
1)char - - > Character
2)数字中找char 数字和 Integer对应关系,char值 - '0' 。例如:a 为 '9', Integer aInt = '9' - '0';
3)ASCII 值:A-Z 65-90,a-z 97-122。字母转换为int值可以直接用int强转:int aVal= (int)'a'; 则 aVal值为97
4)Arrays.sort 可以对数组进行排序,时间复杂度为logN。
5)str.charAt(i) 第 i 个位置的的字符
2. 环形链表 141题
1)入参一定有地方判断是否为空。写完代码检查的时候,多注意
2)同一个对象用“==”比较!
3. 无重复字符的最长子串 3题
1)获取最大值:maxVal = Math.max(v1, v2);
2)相同类型字段初始值:int start = 0, maxLength = 0;
3)map的key值中是否包含某个值:charMap.containsKey(keyVal)
4. 用栈实现队列 232题
1)for循环中,stack.size()的值是每次都会计算的。如果stack中的元素数量有变动,则for选好的终止条件也会变动。
2)可以通过 stack.isEmpty()来判断元素是否为空,不用每次使用stack.size()>0
图的广度和深度搜索有可能会有重复,所以一般用 一个 set保存搜索过的。