![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
2Ululu
这个作者很懒,什么都没留下…
展开
-
python3记忆化的方法
Leetcode python记忆化原创 2022-07-03 19:01:45 · 366 阅读 · 1 评论 -
LeetCode 370 线段树懒标记板子
线段树维护区间和原创 2022-06-04 23:56:54 · 252 阅读 · 0 评论 -
LeetCode 699 线段树懒标记之动态开点(c++)
class Node {public: Node* left; Node* right; int l; int r; int mid; int v; int add; Node(int l, int r) { this->l = l; this->r = r; this->mid = (l + r) >> 1; this->left = th.原创 2022-05-27 18:06:49 · 317 阅读 · 0 评论 -
区间操作的python3板子 LeetCode 715. Range 模块
注意事项:区间都是左闭又开[x,y)from sortedcontainers import SortedListclass RangeModule: def __init__(self): self.rl=SortedList() self.count=0 def addRange(self, left: int, right: int) -> None: #[left,right) right-=1原创 2022-05-16 16:34:19 · 303 阅读 · 0 评论 -
Leetcode 433. 最小基因变化 「BFS」&「双向 BFS」
BFSclass Solution: def minMutation(self, start: str, end: str, bank: List[str]) -> int: s,bank=set(),set(bank) if start==end:return 0 q=deque() q.append((start,0)) s.add(start) while q:原创 2022-05-07 11:33:03 · 348 阅读 · 0 评论 -
Leetcode LCP 52. 二叉搜索树染色 珂朵莉树模板题
typedef long long ll;struct ChthollyTree{ struct node { ll l, r; mutable ll v; node(ll l, ll r, ll v) : l(l), r(r), v(v) {} bool operator<(const node &o) const { return l < o.l; } }; set<node...原创 2022-04-17 23:28:00 · 478 阅读 · 3 评论 -
Leetcode LCP 53. 守护太空城 DP 二进制状态压缩
首先1 <= time[i] <= 5非常的小,我们把时间这个维度可以压缩成5个二进制位,对应位为1表示需要屏障保护,0表示不需要屏障保护所以定义f[i][j]为在第i个位置屏障状态为j需要的最少能量,其中0<=j<32,正好是5个二进制位,每个位1或0分别对应相应的时间是否有屏障保护转移:1.自身开屏障,对应5个二进制位中变成一些单独的1或者连续的12.将自身和右边相邻的一起开屏障不需要再枚举左边开了,因为右边开包括了左边开的情况具体的细节代码中有注释class原创 2022-04-16 20:52:12 · 540 阅读 · 0 评论 -
Leetcode 952. 按公因数计算最大组件大小 C++并查集模板
这个代码是在评论区copy大佬的,觉得写的很不错了,借鉴了!class Solution { class UnionFind { public: vector<int> parent; vector<int> size; int n; UnionFind(int _n): n(_n), parent(_n), size(_n, 0) { iota(parent.begi原创 2022-04-13 15:43:45 · 1112 阅读 · 0 评论 -
Leetcode1606 找到处理最多请求的服务器(线段树解法)
分析:将编号为0,1,..k-1,的k个服务器开始空闲的时间记做time[t],0<=t<k,刚开始所有的time都为0对于一个arrival[i],令x=i%k,我们想要知道以j= x,x+1,...,k-2,k-1,0,1,...,x-2,x-1顺序下的第一个j,使得time[j]<=arrival[i],可以发现[x,k-1]为一个连续的区间,[0,x-1]也是一个连续的区间。相当于在服务器中先查询[x,k-1]区间,如果找到直接返回;否则再查询[0,x-1]区间。这样就能够原创 2022-03-30 14:24:17 · 445 阅读 · 0 评论 -
Leetcode 2213 由单个字符重复的最长子字符串(线段树)
根据题目要求设计线段树节点内的信息只需要pushup,不需要pushdown所以不需要使用懒标记,其中qurry函数也是多余的,但是此份代码主要是为了记录一个线段树的模板class Solution { static const int N = 1e5 ; string s; struct TreeNode { int l, r, size; char lc, rc; int lmax, rmax, dmax; } t原创 2022-03-24 23:03:35 · 484 阅读 · 0 评论 -
树状数组模板
leetcode5999力扣template <class T> class FenwickTree { int limit; vector<T> arr; //树状数组是从1开始储存的,而不是0 int lowbit(int x) { return x & (-x); }public: FenwickTree(int limit) { this->limit = limit; arr = vector<T>.原创 2022-02-20 09:54:07 · 224 阅读 · 0 评论 -
字符串编码Rabin-Karp算法Leetcode 1044. 最长重复子串
最长重复子串注意的点:字符串是全部小写字母,所以其实就是26进制,这里去比26大的最小质数 C++中unsigned long long会自动处理上溢(相乘、相加超出了它能表示的最大范围2^64-1)和下溢(因为减法使得小于0) 求多少次方的时候,可以使用快速幂class Solution {public: int n; unsigned long long a=29; unsigned long long my_power(int m){ u.原创 2021-12-23 22:49:09 · 126 阅读 · 0 评论 -
C++并查集模板
// 并查集模板class UnionFind {public: vector<int> parent; vector<int> size; int n; // 当前连通分量数目 int setCount;public: UnionFind(int _n): n(_n), setCount(_n), parent(_n), size(_n, 1) { iota(parent.begin(), parent.en.原创 2021-12-10 12:53:07 · 485 阅读 · 0 评论 -
leetcode 256 场周赛 自己犯的nc错
第二题:5855. 找出数组中的第 K 大整数C++这样写sort自定义排序怎么写编译多过不了,而且还一直发现不了自己的问题class Solution {public: bool cmp(string a,string b){ int n1=a.size(),n2=b.size(); if(n1!=n2) return n1<n2; else return a<b; } string k原创 2021-08-29 14:07:44 · 98 阅读 · 0 评论 -
python3中实现自定义类的排序(不使用cmp_to_key)
不使用functools.cmp_to_key,重写自定义类的<或者>运算符1.重写 '<'符号class node: def __init__(self,s,a): self.s=s self.a=a def __lt__(self, other): if self.s==other.s: return self.a<other.a else:原创 2021-04-13 16:10:37 · 388 阅读 · 0 评论 -
LeetCode 179. 最大数 python3解法(自定义比较实例)
题目链接:https://leetcode-cn.com/problems/largest-number/cmp想要实现的目的都是从大到小降序排列注意:C++和python的逻辑是相反的python中:s1>s2 返回的是-1s1<s2 返回的是1C++中:s1>s2 返回的是trueelse 返回的是falsepython代码:def cmp(a,b): s1=str(a)+str(b) s2=str(b)+...原创 2021-04-12 12:31:27 · 263 阅读 · 0 评论 -
二分查找:目标值的最小下标和目标值的最大下标
在目标值存在的条件下:1.我们使用的退出循环的条件为l<=r2.找到目标值的最小下标,将大于和等于合并成为一种情况:a[mid]>=target,答案的下标存在与l3.找到目标值的最大下标,将小于和等于合并成为一种情况:a[mid]<=target,答案的下标存在与r具体看代码实现:#include <iostream>#include<stdio.h>using namespace std;int binarySearch_get_le原创 2021-02-17 13:08:21 · 1398 阅读 · 0 评论 -
自定义结构体的哈希函数解决337. 打家劫舍 III
unordered_map<node,int,hashNode,cmpNode> mp;node 为key,int为value,hashNode为自定义结构体的哈希函数(unordered_map就是通过这个值去查找的)cmpNode比较函数(如果哈希值相同,怎么去处理不同的对象,也就是怎么解决冲突)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNod原创 2021-02-04 11:33:56 · 778 阅读 · 0 评论 -
C++ priority_queue,sort 自定义比较函数
#include <iostream>#include<stdio.h>#include<vector>#include<math.h>#include<queue>#include<string>#include<algorithm>#include<map>#include<unordered_set>#include<unordered_map>#include.原创 2021-02-03 10:20:07 · 629 阅读 · 1 评论 -
考研数据结构,计算机组成原理串讲:union,边界对齐,存储的大端小端方式的辨别
union是共享存储单元的数据结构,它所占用的内存长度等于最长的成员的内存长度。 struct的大小取决于它所以的成员的内存长度之和(理论上是这样的,实际上还得考虑它的存储方式是否边界对齐)。 以一个例子来说明边界对齐,大端和小端方式 现有一个int变量x为 0x12345678,假设主存地址为32位(以字节编址,也就是主存的大小位2的32次方4GB) 存储方式为以边界对齐 假设系统为x分配的地址为0x80100000(以边界对齐存储int4B大小,...原创 2020-07-20 19:21:33 · 864 阅读 · 0 评论