摘要: 板子,但是得自己写板子() 具体介绍就不过多介绍了,放一下代码 class Trie { private: struct Node { Node* next[26]; bool isEnd; Node() : isEnd(false) { for (int i = 0; i < 26; i++) { 阅读全文
posted @ 2026-03-17 23:55 rdcamelot 阅读(2) 评论(0) 推荐(0)
摘要: 主要是时间复杂度有所限制 如果单纯从第 k 大角度出发的话,排序,红黑树,或者是用两个堆都可以去解决 但 O(n) 的话使用的是快速查找,解决的是找某个最终下标上的元素的问题 从区间的角度来说,快速查找的思路类似于二分,每次操作完后变化操作的区间 每次选择一个 pivot ,把大于 pivot 的放 阅读全文
posted @ 2026-03-17 23:07 rdcamelot 阅读(2) 评论(0) 推荐(0)
摘要: 因为数据量只有 300 ,因此想到使用暴力查询是否有正方形满足 这样的话就是写一个二维前缀和 class Solution { public: int maximalSquare(vector<vector<char>>& matrix) { int n = matrix.size(); int m 阅读全文
posted @ 2026-03-17 22:27 rdcamelot 阅读(3) 评论(0) 推荐(0)
摘要: 递归解决 每一层都要对左子树和右子树进行翻转 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val 阅读全文
posted @ 2026-03-17 20:33 rdcamelot 阅读(2) 评论(0) 推荐(0)
摘要: 单调栈 用一个栈来维护当前还没有找到大于它的元素 到了一个新位置后,先用这个位置的元素去和栈中的元素比较,比栈中元素大的话,那些位置就找到了它们的目标,可以从栈中弹出,直到栈中没有元素或者栈顶的元素大于当前这个元素 接着把这个元素入栈 之所以称为是单调栈是因为这样操作后栈中最后留下的元素是单调递减的 阅读全文
posted @ 2026-03-17 19:32 rdcamelot 阅读(1) 评论(0) 推荐(0)
摘要: 麻烦的地方就是链表不能直接反向 所以遍历一遍链表把数据存下来,接着反转判断就好了 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val( 阅读全文
posted @ 2026-03-17 19:20 rdcamelot 阅读(4) 评论(0) 推荐(0)
摘要: 第一时间想的实际上是倍增,就是对于每个节点,记录它的 \(2^k\) 级祖先,查询 LCA 的时候让它们先跳到同一深度,接着再逐步向父节点移动 但是这样需要去预处理,并且这里是直接给出了函数和传进来的数据结构,所以换个角度考虑 怎么转换角度呢,如果考虑怎么去实现,那实际上还是一开始提到的思路 但是想 阅读全文
posted @ 2026-03-17 18:25 rdcamelot 阅读(6) 评论(0) 推荐(0)
摘要: 大学虽然在打 ACM ,但为了之后夏令营准备机试或者之后面试的机试的时候准备写一下 leetcode 上的 hot100 时感觉题目风格或者知识点上还是有比较大的差异(板子抄多了以及基础数据结构不太写导致的()),所以打算从头做一遍顺便基本整理一下 应该使用 nullptr 而不是 null,nul 阅读全文
posted @ 2026-03-17 16:40 rdcamelot 阅读(4) 评论(0) 推荐(0)