数据结构
文章平均质量分 61
yinhua405
努力工作
展开
-
1208 · 目标和
给定一个非负整数的列表a1,a2,...an,再给定一个目标S。两种运算,对于每一个整数,选择一个作为它前面的符号。找出有多少种方法,使得这些整数的和正好等于S。原创 2022-08-12 07:09:34 · 77 阅读 · 0 评论 -
342 · 山谷序列
北大学霸令狐冲15年刷题经验总结的《算法小抄模板CheatSheet》助你上岸!现在想让你找所有子序列中满足山谷序列规则的最长的长度为多少?微信添加【jiuzhang0607】备注【小抄】领取。//从左到右统计递减数量。//从右到左统计递减数量。背完这套刷题模板,真的不一样!...原创 2022-07-28 07:22:54 · 118 阅读 · 0 评论 -
1275 · 超级幂次
你的任务是计算 a^b mod 1337,其中 a 是一个正整数,b 是一个超级大的正整数,以数组的形式给出。样例样例1样例2 int mul2(int a, int b){ if (b == 0) { return 1; } int ret = 1; while (b != 1) { if (b % 2 == 0) { a = a*a % 1337;原创 2022-06-01 07:24:05 · 217 阅读 · 0 评论 -
656 · 大整数乘法
以字符串的形式给定两个非负整数 num1 和 num2,返回 num1 和 num2 的乘积。num1 和 num2 的长度都小于110。 num1 和 num2 都只包含数字 0 - 9。 num1 和 num2 都不包含任意前导零。 您不能使用任何内置的BigInteger库内方法或直接将输入转换为整数。样例样例1输入:"123""45"输出:"5535"解释:123 x 45 = 5535样例2输入:"0""0"输出:"0".原创 2022-04-22 07:29:51 · 139 阅读 · 0 评论 -
437. 路径总和 III
给定一个二叉树的根节点 root,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。classSolution{public:voidf(TreeNode*root,inttargetSum,vector<int>sum,int&count){if(nullpt...原创 2021-12-02 06:34:22 · 528 阅读 · 0 评论 -
递归找序列集合
给一个正整数 n ,返回所有包含 n 对括号的合法括号序列。比如给 3 ,我们得返回这样一个序列(集合): ["((()))","(()())","(())()","()(())","()()()"] ,以此类推set<string> generateParenthesis(int n){if (n == 0)return{ "" }; // 基本情况set<string> ans;for (int i = 0; i < n; i++){.原创 2021-11-25 07:10:44 · 207 阅读 · 0 评论 -
332 · 恢复数组
小九有一个长为 nnn 的整型数组,数组中的每个数都在 lll 和 rrr 之间,而且数组的和是 333 的整数倍。请帮小九计算出这个数组一共有多少种不同的可能。输出要对 109+710^9+7109+7 取模数组的长度为 nnn,满足 1≤n≤1051 \le n \le 10^51≤n≤105。数组中的每个元素都满足,l≤ai≤r,1≤l≤r≤109l \le a_i \le r, 1 \le l \le r \le 10^9l≤ai≤r,1≤l≤r≤109。样例中,可能的数组有 [1原创 2021-11-18 07:21:36 · 295 阅读 · 0 评论 -
64. 最小路径和
给定一个包含非负整数的 mxn网格grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12提示:m == grid.length n == grid[i].length 1 <...原创 2021-09-07 07:29:17 · 117 阅读 · 0 评论 -
305 · 矩阵中的最长递增路径
给出一个矩阵,矩阵内的元素都是整数。你需要找出矩阵中的一条最长的递增路径,并返回它的长度。路径可以以矩阵中任何一个坐标作为起点,每次向上、下、左、右四个方向移动,并保证移动路线上的数字递增。你不可以走出这个矩阵。数据保证矩阵的行数和列数不超过200。样例样例 1:输入:[[1,2,3],[6,5,4],[7,8,9]]输出:9解释:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9样例 2:原创 2021-07-02 08:56:37 · 87 阅读 · 0 评论 -
301 · 幸运数2
我们把幸运数定义为:将一个数相邻数位差的绝对值拼成下一个数,重复该操作直到只剩1位。剩下777的是幸运数。例如,219 -> 18 -> 7,1108 -> 18 -> 7。现在给定一个区间[l,r][l,r][l,r],求区间内的幸运数的数量。1≤l<r≤1091 \leq l < r \leq 10^91≤l<r≤109样例样例 1输入: 1 10输出: 1说明: 7是[1,10]中的唯一的幸运数。样例 2输入: 1 100输出:原创 2021-06-30 08:08:17 · 94 阅读 · 0 评论 -
290 · 排序方案
对于有一个排好序的数组,它的元素可以从队首或者队尾加入或弹出,即双端队列。每当我们需要插入一个元素,并且保持它是排好序的,可以选择做两种操作 从队首或队尾弹出一个元素。 将待插入元素加入到队首或队尾。 将之前弹出的元素重新加入到队首或队尾。每插入一个元素后要保持队列是递增的。现在给你一个待插入元素的数组,请按顺序插入到一个空数组中,并计算出最少操作次数。待插入的数组 numsnumsnums 的长度为 nnn,1≤n≤1051 \le n \le 10^51≤n...原创 2021-06-17 08:48:04 · 98 阅读 · 0 评论 -
256 · 最大订单
一名经理被指派去处理公司休息室的食物浪费现象。 休息室里有几包奶精,每包都有有效期,奶精必须在有效期之内使用。 经理还可以选择从杂货店订购额外的奶精,每一包奶精都有不同的有效期。 给定每日对奶精的最大需求量,求出经理在不浪费的情况下可以订购的最大奶精数量。 输入包括三个参数: onHand[]:一个整数数组表示已有的个奶精的保质期 supplier[]:一个整数数组表示可以选择订购的奶精的保质期 demand:每天最多可以消耗的奶精数量请返回在没有浪费的情况下可以订购的最大奶精...原创 2021-05-25 07:41:16 · 108 阅读 · 0 评论 -
247 · 线段树查询 II
对于一个数组,我们可以对其建立一棵 线段树, 每个结点存储一个额外的值 count 来代表这个结点所指代的数组区间内的元素个数. (数组中的某些位置可能没有元素)实现一个 query 的方法,该方法接受三个参数 root, start 和 end, 分别代表线段树的根节点和需要查询的区间,找到数组中在区间[start, end]内的元素个数。为了能更好地理解这道题,你最好先完成线段树的构造和线段树的查询样例样例 1:输入:"[0,3,count=3][0,1,count=1][2,3,co原创 2021-05-18 09:19:35 · 81 阅读 · 0 评论 -
203 · 线段树的修改
对于一棵 最大线段树, 每个节点包含一个额外的 max 属性,用于存储该节点所代表区间的最大值。设计一个 modify 的方法,接受三个参数 root、 index 和 value。该方法将 root 为根的线段树中 [start, end] = [index, index] 的节点修改为新的 value ,并确保在修改后,线段树的每个节点的 max 属性仍然具有正确的值。在做此题前,最好先完成线段树的构造和 线段树查询这两道题目。样例样例 1:输入:"[1,4,max=3][1,2...原创 2021-05-12 08:30:01 · 72 阅读 · 0 评论 -
202 · 线段树的查询
对于一个有n个数的整数数组,在对应的线段树中, 根节点所代表的区间为0-n-1, 每个节点有一个额外的属性max,值为该节点所代表的数组区间start到end内的最大值。为SegmentTree设计一个 query 的方法,接受3个参数root, start和end,根据给定的线段树根,找出区间[start,end]中的最大值。在做此题之前,请先完成 线段树构造 这道题目。样例样例 1:输入:"[0,3,max=4][0,1,max=4][2,3,max=3][0,0,max=1][1,1原创 2021-05-11 08:15:31 · 61 阅读 · 0 评论 -
Redis_哨兵
sentineltypedef struct sentinelRedisInstance { // 标识值,记录了实例的类型,以及该实例的当前状态 int flags; /* See SRI_... defines */ // 实例的名字 // 主服务器的名字由用户在配置文件中设置 // 从服务器以及 Sentinel 的名字由 Sentinel 自动设置 // 格式为 ip:port ,例如 "127.0.0.1:26379" cha...原创 2021-04-27 13:54:21 · 219 阅读 · 0 评论 -
Redis_复制
复制 /* Replication (master) */ int slaveseldb; /* Last SELECTed DB in replication output */ // 全局复制偏移量(一个累计值) long long master_repl_offset; /* Global replication offset */ // 主服务器发送 PING 的频率 int repl_ping_slave_peri...原创 2021-04-21 15:26:11 · 72 阅读 · 0 评论 -
Redis_服务器
服务器/** Redis 命令*/struct redisCommand {// 命令名字char *name;// 实现函数redisCommandProc *proc;// 参数个数int arity;// 字符串表示的 FLAGchar *sflags; /* Flags as string representation, one char per flag. */// 实际 FLAGint flags; /* The actual ..原创 2021-04-20 09:57:15 · 125 阅读 · 0 评论 -
Redis_客户端
客户端/* With multiplexing we need to take per-client state.* Clients are taken in a liked list.** 因为 I/O 复用的缘故,需要为每个客户端维持一个状态。** 多个客户端状态被服务器用链表连接起来。*/typedef struct redisClient {// 套接字描述符int fd;// 当前正在使用的数据库redisDb *db;// 当...原创 2021-04-19 14:11:21 · 74 阅读 · 0 评论 -
Redis_事件
事件文件事件客户端读,服务端产生写事件时间事件/** 文件事件状态*/// 未设置#define AE_NONE 0// 可读#define AE_READABLE 1// 可写#define AE_WRITABLE 2/** 时间处理器的执行 flags*/// 文件事件#define AE_FILE_EVENTS 1// 时间事件#define AE_TIME_EVENTS 2// 所有事件#define AE_ALL_EVENTS (AE_FILE...原创 2021-04-19 13:16:15 · 41 阅读 · 0 评论 -
Redis_aof
aof配置文件appendonly yesappendfsync always#appendfsync everysec# appendfsync no/** 将命令追加到 AOF 文件中,* 如果 AOF 重写正在进行,那么也将命令追加到 AOF 重写缓存中。*/void feedAppendOnlyFile(struct redisCommand *cmd, int dictid, robj **argv, int argc) {sds buf =..原创 2021-04-16 16:14:51 · 343 阅读 · 0 评论 -
Redis_RDB
RDB配置文件save 900 1save 300 10save 60 10000结构// 服务器的保存条件(BGSAVE 自动执行的条件)struct saveparam { // 多少秒之内 time_t seconds; // 发生多少次修改 int changes;};int rdbLoad(char *filename, rdbSaveInfo *rsi) { FILE *fp; rio rdb; in...原创 2021-04-15 19:36:47 · 553 阅读 · 0 评论 -
Redis_数据库
数据库/* Redis database representation. There are multiple databases identified* by integers from 0 (the default database) up to the max configured* database. The database number is the 'id' field in the structure. */typedef struct redisDb {//...原创 2021-04-15 14:55:50 · 66 阅读 · 0 评论 -
Redis_对象
对象typedef struct redisObject{ // 类型 unsigned type : 4; // 编码 unsigned encoding : 4; // 对象最后一次被访问的时间 unsigned lru : REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */ // 引用计数 int refcount; // 指向实际值的指针 void...原创 2021-04-14 19:23:20 · 51 阅读 · 0 评论 -
Redis_压缩列表
压缩列表/** 保存 ziplist 节点信息的结构*/typedef struct zlentry {// prevrawlen :前置节点的长度// prevrawlensize :编码 prevrawlen 所需的字节大小unsigned int prevrawlensize, prevrawlen;// len :当前节点值的长度// lensize :编码 len 所需的字节大小unsigned int lensize, len;...原创 2021-04-14 13:56:39 · 69 阅读 · 0 评论 -
Redis_整数
整数typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t contents[];} intset;原创 2021-04-14 11:07:57 · 86 阅读 · 0 评论 -
Redis_跳跃表
跳跃表表节点/* ZSETs use a specialized version of Skiplists *//** 跳跃表节点*/typedef struct zskiplistNode { // 成员对象 robj *obj; // 分值 double score; // 后退指针 struct zskiplistNode *backward; // 层 struct zskiplistLevel { ...原创 2021-04-13 19:45:46 · 67 阅读 · 0 评论 -
Redis_字典
字典一个字典带有两个哈希表,一个平时用,一个reshash用哈希表哈希表节点rehash渐进式地完成,/** 哈希表节点*/typedef struct dictEntry { // 键 void *key; // 值 union { void *val; uint64_t u64; int64_t s64; } v; // 指向下个哈希表节点,形成链表 struct di...原创 2021-04-13 17:03:41 · 48 阅读 · 0 评论 -
Redis_链表
链表/** 双端链表节点*/typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *value;} listNode;/** 双端链表结构*/typedef struct list { // 表头节点 listNode *head; // 表尾节点 listN...原创 2021-04-13 11:13:33 · 51 阅读 · 0 评论 -
Redis_字符串
sds simple dynamice string1.常数复杂度获取字符串长度2.杜绝缓冲区溢出3.减少修改字符串时带来的内存重分配次数空间预分配,惰性空间释放4.二进制安全5.兼容部分C字符串函数/** 根据给定的初始化字符串 init 和字符串长度 initlen* 创建一个新的 sds** 参数* init :初始化字符串指针* initlen :初始化字符串的长度** 返回值* sds :创建成功返回 sdshdr 相对应的 sds* 创建失...原创 2021-04-13 10:51:10 · 141 阅读 · 1 评论 -
162 · 矩阵归零
162 · 矩阵归零描述给定一个m×n矩阵,如果一个元素是0,则将其所在行和列全部元素变成0。需要在原矩阵上完成操作。样例样例 1:输入:[[1,2],[0,3]]输出:[[0,2],[0,0]]样例 2:输入:[[1,2,3],[4,0,6],[7,8,9]]输出:[[1,0,3],[0,0,0],[7,0,9]]挑战你是否使用了额外的空间?一个直接的解决方案是使用 O(MN) 的额外空间,但这并不是一个好的方案。一个简单的改进方案是使用 O(M + N) 的额原创 2021-04-08 08:23:13 · 190 阅读 · 0 评论 -
194 · 寻找单词
194 · 寻找单词给定一个字符串str,和一个字典dict,你需要找出字典里的哪些单词是字符串的子序列,返回这些单词。 |str|<=1000 2.字典中所有单词长度的总和<=1000 (题目保证所有字母均为小写)样例例1:输入:str="bcogtadsjofisdhklasdj"dict=["book","code","tag"]输出:["book"]解释:只有book是str的子序列例2:输入:str="nmownhite...原创 2021-04-07 09:12:11 · 110 阅读 · 0 评论 -
193. 最长有效括号
193. 最长有效括号给出一个只包含'(' 和')'的字符串,找出其中最长的左右括号正确匹配的合法子串。样例样例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"样例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"intlongestValidParentheses(string&s){intsize=s.size();vector<bool>...原创 2021-04-06 17:24:49 · 48 阅读 · 0 评论 -
192. 通配符匹配-2
192. 通配符匹配判断两个可能包含通配符“?”和“*”的字符串是否匹配。匹配规则如下: '?' 可以匹配任何单个字符。 '*' 可以匹配任意字符串(包括空字符串)。两个串完全匹配才算匹配成功。样例样例1输入:"aa""a"输出: false输出2输入:"aa""aa"输出: true输出3输入:"aaa""aa"输出: false输出4输入:"aa""*"输出: true说明: '*' 可以替换任何字符串输出5...原创 2021-03-26 08:30:13 · 203 阅读 · 0 评论 -
C++性能优化__优化IO
第一,缩短调用链void stream_read_streambuf(std::istream& f, std::string& result) {std::stringstream s;s << f.rdbuf();std::swap(result, s.str());}第二,减少重新分配void stream_read_string_reserve(std::istream& f,std::string& result){f.se原创 2021-03-09 19:58:33 · 326 阅读 · 0 评论 -
C++性能优化__优化并发
第一,减小临界区的范围在临界区中执行I/O 处理无法提高性能。第二,限制并发线程的数量我们应当使可运行线程的数量少于或等于处理器核心的数量,这样能够移除切换上下文的间接开销。第三,避免惊群当有许多线程挂起在一个事件——例如只能服务一个线程的工作——上时就会发生所谓的惊群(thundering herd)现象。当发生这个事件时,所有的线程都会变为可运行状态,但由于只有几个核心,因此只有几个线程能够立即运行。第四,避免锁护送当大量线程同步,挂起在某个资源或是临界区上时会..原创 2021-03-09 19:53:21 · 226 阅读 · 0 评论 -
数据结构---线性表---顺序存储
#define MAXSIZE 20typedef int ElemType;typedef struct{ ElemType data[MAXSIZE]; int length;}SqList;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int转载 2017-06-19 13:19:25 · 214 阅读 · 0 评论 -
数据结构---常用算法
已知先序,中序 ,求二叉树。 BTNode *CreateBT1(char *pre,char *in,int n){ BTNode *s; char *p; int k; if(n return NULL; s = (BTNode*)malloc(sizeof(BTNode) ); s->data = *pre; for(p=in;p原创 2017-06-01 19:52:15 · 208 阅读 · 0 评论 -
数据结构---完全二叉树
完全二叉树某节点没有左孩子,则一定无右孩子。若某节点缺左或右孩子,则其所有后继一定无孩子。 判断一棵二叉树是否为完全二叉树int CompBTNode(BTNode *b){ BTNode *Qu[MaxSize],*p; int front=0,rear=0; int cm=1; int bj=1; if(b!= NULL) { rear原创 2017-06-01 19:36:56 · 406 阅读 · 0 评论 -
数据结构---后序遍历
typedef struct node{ ElemType data; struct node *lchild; struct node *rchild;}BTNode;void PostOrder(BTNode *b){ if(b != NULL) { PostOrder(b->lchild); PostOrder(b->rchild); p原创 2017-05-26 19:35:37 · 380 阅读 · 0 评论