前缀树的作用:查找有没有加入过该字符串的时间复杂度是字符串的长度(hash表也可以做到)。可以查找加入过的字符串有多少是使用"ab"作为前缀的。(hash表做不到)
前缀树的节点设计
nexts当有很多路时,可以采用hash表的方式存储路,key代表某一条路,value的Node代表走到哪一个节点上去
JVM会把找不到的节点内存自动释放掉。而c++释放内存资源是由自己维护的,如果是c++代码需要自己释放后续节点
对一个字符串类型的数组进行拼接,要求拼接后的字符串字典序最小。
贪心策略1:先对数组进行字典序的排序,然后从小到大依次拼接。这种方法不行如"b","ba"。"b"的字典序小于"ba",拼接后"bba"字典序大于"bab" 。反例证明不行。
贪心策略2:对两个字符串进行比较:先对两个字符串进行拼接,如果谁拼接到前的字典序更小,就把谁放在前面
证明我们的排序策略是有传递性的:
abc乘以k进制的平方,就代表该数向左移动两位
证明贪心策略可行性
数学归纳法证明中间隔了三个、四个。。个数交换。会增大字典序
哈夫曼树编码问题:先把数放入小根堆中去,然后依次遍历结合。
哈夫曼树编码是求总编码长度最小的问题。也就是每个根节点权值最小问题。和该问题等价
贪心策略 堆和排序是最常用的两个策略
我的思路:应该使用利润比上成本 就是每一块钱能获得多少利润。这种方式进行贪心(不太对)
左神思路:每次做这个项目都选在资金范围内,挣得最多的
和贪心无关的题目
最后得到的两个堆就是所有数的N/2,偶数的中位数是(4+5)/ 2。
n皇后问题,最低指标也是n的阶乘级别。但是可以进行常数时间的优化
使用位运算进行常数时间的优化。
n皇后问题中的n是多少,就在二进制数中生成多少个1.limit的值不代表任何信息。重点使用他的位
没听懂。到时候再听一遍