算法练习笔记

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保存搜索过的。

 
 

 

posted @ 2019-12-05 21:12  Jtianlin  阅读(171)  评论(0编辑  收藏  举报