学习笔记
深度优先搜索DFS代码模板
public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> allResults = new ArrayList<>(); if(root==null){ return allResults; } travel(root,0,allResults); return allResults; } private void travel(TreeNode root,int level,List<List<Integer>> results){ if(results.size()==level){ results.add(new ArrayList<>()); } results.get(level).add(root.val); if(root.left!=null){ travel(root.left,level+1,results); } if(root.right!=null){ travel(root.right,level+1,results); } }
贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是全局最好的算法
贪心算法和动态规划的不同在于贪心算法对每个子问题的解决方案都做出选择,不能回退。动态规划则会保存以前的运算结果,并根据以前的结果对当前进行选择,有回退功能。
贪心:当下做局部最优判断
回溯:能够回退
动态规划: 最优判断+回退
想清楚局部最优,想清楚全局最优,感觉局部最优是可以推出全局最优,并想不出反例,那么就试一试贪心
二分查找的前提
- 目标函数单调性(单调递增或递减)
- 存在上下界(bounded)
- 能够通过索引访问(index accessible)
递归模板 动态规划模板 分治回溯模板 二分查找模板
先严格按照覃超的方式来,每一题都需要比较多的时间
第一遍花的时间多而已,第一遍就要把事情做完,你回头做的工作只是把最优解 O(1)化记忆,前面四周的总结化为一个,就是要严格执行,特别第一遍,要全面且快,迅速总结出思路,共同点,然后写出最完美代码和注释和笔记,然后后面四遍O(1)记忆