摘要:
1. 动态规划的适用场景 动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。 2. 动态规划的基本思想 动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。通常许多子问题非常相似, 阅读全文
摘要:
操作: 单点更新,区间求和 区间求和:如sum [3,10) 需要对19,5,12,26节点求和即可。 观察可知,左端点为右子节点(奇数)时直接相加,右端点为左子节点(偶数)时直接相加,两边向中间移动并求其父节点。 Refer: Codeforces blog 树状数组解法 所有的奇数位置的数字和原 阅读全文
摘要:
随机性问题 水塘抽样算法可保证每个样本被抽到的概率相等 使用场景:从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到主内存的情况 Knuth洗牌算法 拿起第i张牌时,只从它前面的牌随机选出j,或从它后面的牌随机选出j交换即可 阅读全文
摘要:
1、使用场景 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接字),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TC 阅读全文
摘要:
表锁: MySQL服务器端会使用读写锁实现表锁,忽略存储引擎的锁机制 行锁: 在存储引擎使用的锁机制,并发效果更好 事务:一组原子性的SQL查询,要么全部执行成功,要么全部执行失败 ACID:原子性,一致性,隔离性,持久性 隔离级别:未提交读(用的少),提交读(不可重复读),可重复读(出现幻读),可 阅读全文
摘要:
天际线问题,参考自: 百草园 天际线为当前线段的最高高度,所以用最大堆处理,当遍历到线段右端点时需要删除该线段的高度,priority_queue不提供删除的操作,要用unordered_map来标记要删除的元素。从heap中pop的时候先看有没有被标记过,如果标记过,就一直pop直到空或都找到没被 阅读全文
摘要:
线程有join和detach两种结束方式,join:主线程等待该线程结束,detach:主线程不等待该线程结束,让其在后台运行。join需要注意选择适当的位置,在线程启动后可能会抛出异常,在try/catch中也应该考虑join(一种方式是使用“资源获取即初始化方式”(RAII,Resource A 阅读全文
摘要:
CAS( compare and swap) 原子操作,保证了如果需要更新的地址没有被其他进程(线程)改动过,那么它可以安全的写入。而这也是我们对于某个数据或者数据结构加锁要保护的内容,保证读写的一致性,不出现dirty data。可在循环中不断执行CAS,如果共享变量没有改变,那么swap,在当前 阅读全文
摘要:
给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。最近公共祖先是两个节点的公共的祖先节点且具有最大深度。假设给出的两个节点都在树中存在。 dfs递归写法 查找两个node的最近公共祖先,分三种情况: 深度优先遍历二叉树,一旦找到了两个节点其中的一个,就将这个几点返回给上一层,上一层节点通过判断 阅读全文
摘要:
1. Node.js 使用了单 线程、非阻塞的事件编程模式 Node.js 最大的特点就是采用异步式 I/O 与事件驱动的架构设计。对于高并发的解决方 案,传统的架构是多线程模型,也就是为每个业务逻辑提供一个系统线程,通过系统线程切 换来弥补同步式 I/O 调用时的时间开销。Node.js 使用的是 阅读全文