【算法】
题目一:
题目是给一串数字(0 - 9)每个数字之间可以加 + - 号或者不加,组成的表达式计算结果等于 给定的目标数,输出所有满足条件的表达式。
例如: [1 2 3 4 5 6 7 8 9] 目标 100
可能的组合:
1 + 23 - 4 + 56 + 7 + 8 + 9
-1 - 2 + 34 - 5 - 6 + 78 + 9
题目二:
力扣易思柳,LRU题,之前没刷过,想到了用Dictionary和linkedlist来处理. 可以通过linkedlistnode 的prev和next快速定位来删除node,做到O(1) put和get
题目三:
应该算是一道easy-medium,给定一个数组,只有一个初始数字1,对这个数组的每个数字k,做k*2+1和k*3+1,然后加入数组,要求这个数组是sorted并且没有重复元素,返回第N个
这个数组应该是[1,3,4,7,9,10,13,....]
算法
3(1*2+1), 4(1*3+1)
7(3*2+1), 10(3*3+1)
9(4*2+1), 13(4*3+1)
...
因为出现了3算出来的比4还大,所以单纯用queue不行,要用heap,然后用set去重
分析了时间空间复杂度。
【系统设计】
题目一:
为Youtube用户设计列出一小时之内top 10播放量的视频,就是top k问题,我还讲了count-min sketch
题目二:
Google search ,Top K search results
题目三:
短链 short url
备注:怎么扩展,怎么确保数据不丢失
样例:
- 确定需求,我们要解决的问题是什么?
- 确定核心功能,设计API、实体类
- 画出核心模块的系统架构图(比如:基于规模,用高效的数据库来存储所有的推特和支持超大量的读要求,还需要一个分布式存储系统来保存图像和视频)
- 细节设计(比如:大量数据存储如何分区,如何处理热点数据,哪个层面需要缓存加速,那个模块需要负载均衡)
- 识别和解决瓶颈(比如:系统中哪个点容易失效,如何消除影响保障可用性?数据库备份足够吗,数据库宕机如何避免影响?某个服务不可用会不会导致服务雪崩?如何监控服务表现,性能异常及时告警?)
- 缓存
- 负载平衡
- 数据库选择
- 数据库架构
- 复制
- 分片