1. 分解问题的角度: fix 某一维度,尝试另一维度上的所有可能
   a. 可能是array的(i, j)pointers, b. 可能是矩形的长与宽, c. 可能是tree的每一个subtree, d. 可能是情景题的每一对pair...
2. 求所有解的, 暴力上backtracking吧
3. 如果问最短/最少的, 先想BFS、DP这对好基友:忘了bfs了
4. 如果环相关/重复访问, DFS + visited state雄起:忘了visited了
5. 如果问连通性, 静态靠DFS/BFS, 动态靠Union-Find:忘了动态了
6. 如果有依赖性, 想想Topologic order 和indegree
7. DAG的万能套路 DFS+memo, 再到DP
8. 建图的时候想想vertex, edges/neighbors, cost分别是什么。如果出现cycle, 别忘了给vertex增加状态
9. 树相关, 永远有backtracking 和 pure recursion两条路:啥是pure recursion啊?
10. 遇到字符串/字典/char board相关的, Trie tree总是可以试试的:用得少别怪我
11. Range里求最大/最小/sum等特征值, Segment tree会是不错的选择:用得少别怪我
12. Matrix和Array通常都是1. Two Pointers, 2. Sliding Window(fixed & not fixed), 3. DP
13. DP题型往往是: a. 问你可不可以啊, 数量有多少啊, b. 两个string上match来match去的, c. 1D/2D array 相关, d. 博弈游戏
14. 破解DAG cycle想想哪个维度是具有单调性的: 常见的steps, directions, paths
15. Reversed idea非常重要, 可能会帮助你破题: 最长可能是某种最短的反面, 最多可能是某种最少的反面, obstacle的反面是reachable, subarray的反面是array中的剩下元素, left的反面是right。:用得少别怪我
16. Look up别忘了HashMap/HashSet, HashMap + DLL是常见hybrid数据结构。:用得少别怪我
17. 找规律试试那些旁门左道: 单调Stack/双端Deque::用得少别怪我
18. 排序大法总是可以试试的::用得少别怪我
19. 时空复杂度: a. backtracking相关, 想想branching factor和height
                         b. DFS+memo/DP相关, 想想state数量, 以及每个state的cost
                         c. tree相关, 总是要考虑balanced 和 single linked list的 
                         d. array/矩阵相关, 先数数你有多少个for loops 
                         e. binary search application相关, 别忘了check function开销
                         f. stack/queue/deque相关, 常说的吃进去一次又吐出来一次
                         g. Java的string是朵奇葩, string concatenation不是免费的
                         h. 没人知道n是什么, 先告诉别人m,n,k,V,E是什么
20. 比较不同sol的trade offs: a. Time/Space complexity异同:头一次听说
                                             b. online/offline算法
                                             c. pre-computation cost
                                             d. 不同APIs的call frequency差异会导致不同的时间要求
                                             e. extension: 是否适用于generic parameters/stream input
                                             f. 线程安全/large scale

【scarletthln 关于算法的一点总结】的更多相关文章

  1. 关于 Bellman-Ford 与 Floyd 算法的一点感想

    在四种常用的最短路算法 Dijkstra, SPFA, floyd, Bellman-Ford 中, Dijks 和 SPFA 的使用较为普遍, 对大多数人来说, 也较为熟悉. 然而, floyd 与 ...

  2. 关于dijkstra算法的一点理解

    最近在准备ccf,各种补算法,图的算法基本差不多看了一遍.今天看的是Dijkstra算法,这个算法有点难理解,如果不深入想的话想要搞明白还是不容易的.弄了一个晚自习,先看书大致明白了原理,就根据书上的 ...

  3. 学习KMP算法的一点小心得

    KMP算法应用于 在一篇有n个字母的文档中 查找某个想要查找的长度为m的单词:暴力枚举:从文档的前m个字母和单词对比,然后是第2到m+1个,然后是第3到m+2个:这样算法复杂度最坏就达到了O(m*n) ...

  4. 关于PCA算法的一点学习总结

    本文出处:http://blog.csdn.net/xizhibei ============================= PCA,也就是PrincipalComponents Analysis ...

  5. 个人对于React的Diff算法的一点疑问(待更新)

    本人对于Diff算法也并未做深入研究,只是大概的看过一些博文了解了些原理,但依然有了如下疑问 : 对于vdom所表示的对象中,若在该oldObj和newObj之间,发现一个元素节点所表示的子对象不见了 ...

  6. NYOJ 737---石子归并(GarsiaWachs算法)

    原题链接 描述    有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆.求 ...

  7. 4-2.矩阵乘法的Strassen算法详解

    题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B ...

  8. 读吴恩达算-EM算法笔记

    最近感觉对EM算法有一点遗忘,在表述的时候,还是有一点说不清,于是重新去看了这篇<CS229 Lecture notes>笔记. 于是有了这篇小札. 关于Jensen's inequali ...

  9. Strassen 矩阵相乘算法(转)

    偶尔在算法课本上面看到矩阵相乘的算法,联想到自己曾经在蓝桥杯系统上曾经做过一道矩阵相乘的题目,当时用的是普通的矩阵相乘的方法,效率极低,勉强通过编译.所以决定研究一下Strassen矩阵相乘算法,由于 ...

随机推荐

  1. Xilinx FPGA开发随笔

    1.UCF文件 1.1.UCF作用 UCF文件主要是完成管脚的约束,时钟的约束, 以及组的约束. 1.2.UCF语法 普通IO口只需约束引脚号和电压: NET "端口名称" LOC ...

  2. python版本的简单贪吃蛇

    先看看效果,白色的条是蛇(简单勿怪,有研究的同学请告知做的美观点),做了一个笑脸是糖果,背景弄了一个图, 代码也是从其他人那边弄来的,改了一部分直接可以在window上直接运行 代码如下: #codi ...

  3. memory_profiler的使用

    作用:memory_profiler是用来分析每行代码的内存使用情况 使用方法一: 1.在函数前添加 @profile 2.运行方式: python -m memory_profiler memory ...

  4. GC的过程

    哪些内存需要GC 判断对象是否还存活 引用计数法 给对象中添加一个引用计数器,每当一个地方引用它时,计数器值就加1:当引用失效时,计数器的值就减1,任何时候计数器为0的对象就是不可能再被使用的. 微软 ...

  5. ReentrantLock原理

    ReentrantLock主要利用CAS+CLH队列来实现.它支持公平锁和非公平锁,两者的实现类似. CAS:Compare and Swap,比较并交换.CAS有3个操作数:内存值V.预期值A.要修 ...

  6. php 跨域问题 解决办法

    php 跨域问题的解决主要有两步: 本人使用的是  windows下的 phpstudy的集成环境 1.修改服务器配置文件 在 apache 的配置文件  D:\phpStudy\Apache\con ...

  7. C机器级移位,编码表示 无符号编码表示,有符号编码表示一般最常见的方式是补码

    C机器级移位,编码表示 无符号编码表示,有符号编码表示一般最常见的方式是补码  w位补码所能表示的值范围是 首先我们得心知 补码的最高有效位是符号位,当符号位位1是表示的是负值,当符号位是0是,表示的 ...

  8. java 启动报错 Unsupported major.minor version 52.

    这是java 版本问题,主要是版本不统一,你看看你开发工具用的java版本(编译的java版本和开发的java版本)是否统一,如果没有统一就会报这个错误.

  9. nginx问题集锦

    1.配置访问指定路径的文件 以访问/mnt/data/logs下文件为例,修改nginx.conf配置,执行命令重新加载/usr/local/nginx/sbin/nginx -s reload lo ...

  10. ThinkPHP实现支付宝接口功能 代码实例

    我们这里用的是即时到帐的接口,具体实现的步骤如下: [title]一.下载支付宝接口包[/title]下载地址:https://doc.open.alipay.com/doc2/detail?tree ...