Word Ladder类型题

Word Ladder I和Word Ladder II两道题给我们的经验:

  1. It’s much faster than one-end search indeed as explained in wiki.
  2. BFS isn’t equivalent to Queue. Sometimes Set is more accurate representation for nodes of level. (also handy since we need to check if we meet from two ends)
  3. It’s safe to share a visited set for both ends since if they meet same string it terminates early. (vis is useful since we cannot remove word from dict due to bidirectional search)
  4. It seems like if(set.add()) is a little slower than if(!contains()) then add() but it’s more concise.
Read more

Path Sum总结

Path Sum类型题的思路就是进行DFS。编写DFS函数的时候要想明白:1.DFS函数的作用是干什么 2.DFS函数的base case是什么 3.DFS函数的输入输出分别是什么

Read more

Majority Vote总结

Majority Element题型是找一个数组中超过n/k的majority元素,使用的算法是Majority Vote。
原理就是对于每一个Majority Element都设置一个count:1.如果选中的num与Majority Element相等,对应的count++ 2.如果所有的Majority Element没有与num相等的,那么去检查有没有count为0,如果有,将这个Majority Element设置为num并将count设为1 3.如果以上都不符合,那么所有count–

所以我们看到程序中都是用的if,else if,也就是说有符合条件的情况,对于这个num的判断就结束了

Read more

Backtracking问题总结

Backtracking总结

Backtracking本质上就是DFS,相当于不停地往深处进行dfs,遇到不可能的情况就停止dfs回到上层。
相当于有一些剪枝的DFS。

Read more

LinkedList Cycle问题

LinkedList Cycle问题

在LinkedList中查看是否存在cycle,使用的主要方法是Floyd’s Tortoise and Hare算法,原理就是设置两个快慢指针,如果存在cycle,那么快慢指针一定会相遇。
当然不止LinkedList可以使用这个方法,只要我们能把题目类比成LinkedList(也就是前一个数能找到后一个数,其实就是LinkedList的作用),然后题目中存在环,那么也就可以使用这个方法。

Read more

Binary Search总结

Binary Search And Search Problem总结

Search问题的核心思想只有一个,就是每一步都会减少搜索域

Read more