07 2023 档案
摘要:DFS 没有返回值 max在递归时要慎重用引用,因为在回溯时可能不能改变max; 因为节点的值可能有负数,所以最大值从根节点开始,根节点一定是好节点。 int goodNum=0; void dfs(TreNode* root,int max){ if(!root)return ; if(root-
阅读全文
摘要:这道题是考虑的深度优先搜索,使用递归 vecotr和queue入队操作并不相同: vector只能使用push_back(); queue既可以使用push()还可以使用push_back() void FindLeaf(TreeNode* root,vector<int>& v){ if(!roo
阅读全文
摘要:深度优先搜索,递归 maxDepth(TreeNode* root){ if(!root)return 0; return max(maxDepth(root->left),maxDepth(root->right))+1; } 广度优先搜索,队列 queue<TreeNode*>q; q.push
阅读全文
摘要:1尾插法:记录前面的节点,使后面的节点指向前面的节点;记后面的节点为now。因为要不停移动now,使其移动所以要临时记录原来之后的节点。 ListNode* now=slow->next; ListNode* pre=nullptr; while(now){ ListNode* node=now->
阅读全文
摘要:每个节点的next只有一个 因为要反转。必定需要存储之前的节点。 而现在的节点要根据原来的next进行更新,因为now->next已经更新为前面的节点,所以要先存储之前的now->next ListNode* pre=nullptr;//每个链表结尾都要使用nullptr ListNode* now
阅读全文
摘要:思路:先将寄链表连接起来;再将偶链表连接起来;最后将寄链表和偶链表一起连起来。 首先需要一个指针结构体去记录下偶链表的表头。最后才能将两个链表连接起来。 ListNode* odd=head; LisrNode* even=head->next; ListNode* evenhead=head->n
阅读全文
摘要:遇见中间节点就删除这个节点 可以用快慢指针 ListNode*fast=head; ListNode*slow=head; LiseNose*pre; whie(fast&&fast->next){//在这里中间节点是向下取整,因此可能会跳过一个节点,所以两个判断条件 fast=fast->next
阅读全文
摘要:基本操作 入队: queue.push() queue.push_back()//两者效果相同 出队: queue.pop(); queue.pop_back();//都从尾部操作 考虑两个因素:1.每个参议员的决定都由之后的参议员决定 2.决定禁用之后都不能在投票 queue<int>radian
阅读全文
摘要:输入的时间是递增的 输出 的时[t-3000,t] queue <int>q; int ping(int t){ q.push(t); while(q.front<t-3000){ q,pop(); } return q.size(); }
阅读全文