摘要:
思路 要求是从根节点开始的路径,这会比从任意节点开始的路径简单很多 思路是从根节点开始遍历每一条路径,如果和没有达到目标值就继续向下遍历 大于就回退,等于就返回到结果集中,可以看到这是一个回溯动作 实际过程中,首先不管是等于还是大于,回退pop()操作都要执行,这样才不会影响到后面 其次,这里要求必 阅读全文
摘要:
最近的两次面试被分别被问到了: 如果初始化 HashMap 的容量为 100,那么实际容量会是多少? 如果初始化 HashMap 的容量为 20,那么实际容量会是多少?会不会发生扩容? 自己想当然的会回答:容量会是满足 2 的幂次 * 负载因子 >= 初始化指定容量的值 public static 阅读全文
摘要:
这种按照一定规则来验证字符串的题看起来很麻烦,想到另外一道类似的是验证 IP 地址 ……我觉得我理不清这个判断逻辑以及各个逻辑间的关系以控制逻辑 bool isNumber(string s) { // 首先这个字符串可能得样式为 // [若干可能的空格][[+/-][num./num.num/.n 阅读全文
摘要:
书上给出的第一个方法是用两个栈,将两个链表的节点依次入栈,然后出栈就相当于从后往前遍历了,这样只需要找到最后一个相同的链表节点 同样应该也可以使用内存栈,也就是递归来实现这一过程 第二种思路不需要额外的空间,而是先分别遍历两个链表得到链表的长度,然后让较长的链表指针将差值走掉,最后就可以同步遍历,第 阅读全文
摘要:
#### 二叉搜索树 ```cpp TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { // 如果p、q一定存在,那么root就一定不是空指针 TreeNode* traverse = root; wh 阅读全文
摘要:
多线程实现生产者消费者,堆积满 100 后停止生产,消费到小于 50 后继续生产 这是一种写法,但是我觉得不太好: 1. 它通过循环创建了很多的线程,每个线程只消费/生产一次 2. 它使用`notifyAll()`通知所有的线程唤醒,包括生产者和消费者,感觉产品数量永远也达不到 50 ```java 阅读全文
摘要:
### B 卷 #### 100 分题 1:支持优先级的队列 实现一个支持优先级的队列,高优先级先出队列,同优先级时先进先出。 如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。 队列存储的数据内容是一个整数。 输入描述:一组待存入队列的数据(包含内容和优先级)。 输出描述:队列的数据内容 阅读全文
摘要:
打印出 n 个骰子所能扔出的所有点数的概率 ### 思路 dp[i][j] 表示 i 个骰子,投出 j 的概率 而概率 = 点数出现的次数 / 总次数 而 i 个骰子掷出 j 的次数 = i - 1 个骰子掷出 j- 1 的次数 + i - 1 个骰子掷出 j -2 的次数 + … + i - 1 阅读全文
摘要:
数组中除了两个数字,其他数字都出现了两次,找出这两个只出现了一次的数字 判断一个数字出现过没有,我们最常用的就是 set,set 中存在,那么就说明已经出现过了 但是这里要求空间复杂度`O(1)`,所以得换个思路 于是我想到了排序,将数组排序后相同的两个重复元素肯定是相邻的,这样我们只需要一次遍历就 阅读全文
摘要:
题目要求`O(log (m+n))`的时间复杂度 知道了两个数组的长度,那么中位数的下标以及如何计算是可以确定的,给出的是两个正序数组,如果使用双指针,从两个数组头开始扫描并比较,找出合并后第 K 小的数字,时间复杂度是多少? 时间复杂度是`O((M+N)/2)`,这个目标还不及题目的要求,看到`l 阅读全文