???
我就忘记切号骂了一下LC啊陆老师
而且@ ctzsm @ YoumuChan @ Sleepless 这三位才是真神
这就是为什么要每个平台用不一样的ID,打一枪换一个地方(逃
???
我就忘记切号骂了一下LC啊陆老师
而且@ ctzsm @ YoumuChan @ Sleepless 这三位才是真神
这就是为什么要每个平台用不一样的ID,打一枪换一个地方(逃
倒不完全是id一样
我每个网站都留指向下一个站点的指针了
而且留得比较明显
偷偷假艾特也太坏了
第二次忘记切号 有理由怀疑是故意忘记切号
我会故意留下链接到别的网站的假信息增大盒武器使用难度
惊扰了巨佬是要杀头的
这不是要给陆老师刷个八月全勤吗,全勤出了bug肯定是要狠狠斥责lc
T3强行状压DP+剪枝,一个样例让我难逃TLE命运
我日,为什么C++状压DP就能过,气抖冷
哦,原来应该状压行
T4可以暴力过,我其实规律都找出来了
难受,黑马楼启动
\color{purple}\Biggl(\color{blue}\biggl(\color{green}\Bigl(\color{yellow}\bigl(\color{orange}\,(\color{black}{\Huge{\color{red}征友,\color{blue}希望可以婚绿\color{orange}130}} \,\color{orange})\,\color{yellow}\bigr)\color{green}\Bigr)\color{blue}\biggr)\color{purple}\Biggr)
\Large\color{purple}富\color{olIve}婆\color{blue}大姐姐\color{red}请\color{violet}大力\color{green}送\color{lime}我\color{black}黑神话\color{orange}DLC
https://leetcode.com/problems/delete-nodes-from-linked-list-present-in-array
没啥意思,明天暂停一个周末,去尝试找一把五六半
python 那个 x in list 的实现会tle 呃 好蠢
dfs和验证写一起,TLE了
https://leetcode.com/problems/linked-list-in-binary-tree/
不知道为什么一定要分开写
什么是分开,我暴力过了,数据量那么少,虽然性能很差
bool isSubPathCannotSkip(ListNode* head, TreeNode* root) {
if (!head) return true;
if (!root) return false;
if (root->val == head->val)
{
if (isSubPathCannotSkip(head->next, root->left)) return true;
if (isSubPathCannotSkip(head->next, root->right)) return true;
}
return false;
}
bool isSubPath(ListNode* head, TreeNode* root) {
if (!head) return true;
if (!root) return false;
if (isSubPathCannotSkip(head, root)) return true;
if (isSubPath(head, root->left)) return true;
if (isSubPath(head, root->right)) return true;
return false;
}
看了第一名的代码,区别是先test后call还是先call后test,快了但是不DRY
如果同时dfs和验证就会TLE
tree is about DP
我最喜欢jeff在讲dp的时候说的这句话。把在复杂的数据结构上执行的算法抽象成dp状态图的话,会舒服一些。
DP is about 有向无环图中的爆搜
当年一个CTSC选手给我们讲的,后来我就就豁然开朗,龙场悟道
yes, that’s what Jeff said
and you can abstract it to “whatever-first-search”
你们俩这尬聊一看就不是一波人
https://leetcode.com/problems/insert-greatest-common-divisors-in-linked-list
昨天的题,这真没啥可说的吧,随便写写就秒了
上代码看看?(以及其实可以KMP,也是一种dfs和验证写一起)
我觉得可能是会重复遍历一些节点,但是我注意力涣散看不出来:
bool recurse(ListNode* head, ListNode* lst, TreeNode* tre) {
if (lst == nullptr) return true;
if (lst != nullptr && tre == nullptr) return false;
if (lst->val == tre->val) {
bool l = recurse(head, lst->next, tre->left);
if (l) return true;
bool r = recurse(head, lst->next, tre->right);
if (r) return true;
}
bool l = recurse(head, head, tre->left);
if (l) return true;
bool r = recurse(head, head, tre->right);
if (r) return true;
return false;
}
假如root匹配list第一个元素但是root.left不匹配下一个
你的代码会dispatch这几个搜索
(head, head, root) → (head, head.next, root.left) → (head, head, root.left.left)
(head, head, root) → (head, head, root.left) → (head, head, root.left.left)
注意到(head, head, root.left.left)在两种不同情况下都被查询了,估计是个指数复杂度。
压行怪来了
bool isSubPath(ListNode* head, TreeNode* root,bool start=1) {
if(!head)return 1;
if(!root)return 0;
if(root->val==head->val&& (isSubPath(head->next,root->left,0)||isSubPath(head->next,root->right,0)))return 1;
return start?isSubPath(head,root->left)||isSubPath(head,root->right):0;
}