- 博客(13)
- 收藏
- 关注
原创 Leetcode 1994. 好子集的数目
连接:1994. 好子集的数目给你一个整数数组nums。如果nums的一个子集中,所有元素的乘积可以表示为一个或多个 互不相同的质数 的乘积,那么我们称它为好子集。比方说,如果nums = [1, 2, 3, 4]:[2, 3],[1, 2, 3]和[1, 3]是 好子集,乘积分别为6 = 2*3,6 = 2*3和3 = 3。[1, 4] 和[4]不是 好子集,因为乘积分别为4 = 2*2 和4 = 2*2。请你返回 nums中不同的好子集...
2022-02-24 11:37:58
588
原创 Redis之对象
Redis没有直接使用之前提到过的数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象。对象的类型与编码redisObject数据结构通过encoding属性来设定对象所使用的编码,而不是为特定类型的对象关联一种固定的编码,极大地提升了Redis的灵活性和效率,因为Redis可以根据不同的使用场景来为一个对象设置不同的编码,从而优化对象在某一场景下的效率typedef st...
2022-02-18 13:10:17
282
原创 Redis数据结构之压缩列表(ziplist)
压缩列表( ziplist) 是列表键和晗希键的底层实现之一。当一个列表键只包含少量 列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么 Redis 就 会使用压缩列表来做列表键的底层实现。压缩列表是 Redis 为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每个节点可以 保存一个字节数组或者一个整数值。数据结构压缩列表结构zlbytes zltail zllen entry1 endtry2 ... ent
2022-02-17 18:08:52
613
原创 Redis数据结构之整数集合(intset)
整数集合( intset) 是集合键的底层实现之一,当一个集合只包含整数值元素,并且这 个集合的元素数量不多时, Redis 就会使用整数集合作为集合键的底层实现。整数集合 (intset) 是 Redis 用于保存整数值的集合抽象数据结构,它可以保存类型为int16 、int32 或者 int64 的整数值,并且保证集合中不会出现重复元素。数据结构typedef struct intset { //编码方式 uint32_t encoding; //集合元素数量
2022-02-14 09:34:42
331
原创 Redis数据结构之跳跃表
跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持平均 0(logn)、最坏 O(n)的复杂度的节点查找,还可以通过顺序性操作来批量处理节点。在大部分情况下,跳跃表的效率可以和平衡树相媲美,井且因为跳跃表的实现比平衡树要来得更为简单,所以有不少程序都使用跳跃表来代替平衡树。一个有序集合包含的元素数量比较多,或者有序集合中元素的成员是比较长的字符串时,Redis就会使用跳跃表来作为有序集合键的底层实现。数据结构typedef .
2022-02-10 18:32:13
592
原创 Redis数据结构之字典
字典是一种用于保存键值对( key-value pair )的抽象数据结构。Redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对数据结构哈希表数据节点typedef struct dictEntry { //键值对的key void *key; //键值对的value union { void *val; uint64_t u64; int64_
2022-01-27 14:22:22
1241
原创 Redis数据结构之链表
链表提供了高效的节点重排能力,顺序性的节点访问方式,并且可以通过增删节点 来灵活地调整链表的长度。链表在 Redis 中的应用非常广泛,比如列表键的底层实现之一就是链表,除此之外,发布与订阅、慢查询、监视器等功能也用到了链表, Redis 服务器本身还使用链表来保存多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区。链表的数据结构typedef struct listNode { //前置节点 struct listNode *prev...
2022-01-26 10:55:23
946
原创 Redis数据结构之SDS
Redis没有直接使用C语言传统的字符串表示,而是自己构建了一种名为简单动态字符串(simpledynamicstring,SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。SDS结构总共有五类SDS结构,根据设置的字符串串长度,选择对应的结构体。结构体中,len表示字符串的长度,alloc 表示字符串最大的长度,flags 低三位保存sds的类型,buf 占位符。/* Note: sdshdr5 is never used, we just acce...
2022-01-24 11:32:47
1352
原创 Leetcode 2029. 石子游戏 IX
题目链接:2029. 石子游戏 IXAlice 和 Bob 再次设计了一款新的石子游戏。现有一行 n 个石子,每个石子都有一个关联的数字表示它的价值。给你一个整数数组 stones ,其中 stones[i] 是第 i 个石子的价值。Alice 和 Bob 轮流进行自己的回合,Alice 先手。每一回合,玩家需要从 stones 中移除任一石子。如果玩家移除石子后,导致 所有已移除石子 的价值总和 可以被 3 整除,那么该玩家就 输掉游戏 。如果不满足上一条,且移除后没有任何剩余的石子,那么.
2022-01-20 11:11:53
2685
原创 Leetcode 1220. 统计元音字母序列的数目
题目链接:1220. 统计元音字母序列的数目给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串:字符串中的每个字符都应当是小写元音字母('a', 'e', 'i', 'o', 'u')每个元音'a'后面都只能跟着'e'每个元音'e'后面只能跟着'a'或者是'i'每个元音'i'后面不能 再跟着另一个'i'每个元音'o'后面只能跟着'i'或者是'u'每个元音'u'后面只能跟着'a'由于答案可能会很大,所以请你返回 模1...
2022-01-17 11:04:12
280
原创 Leetcode 71. 简化路径
题目链接:71. 简化路径给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。请注意,返回的 规范路径 必须遵循下述格式
2022-01-15 12:25:28
78
原创 Leetcode 334 递增的三元子序列
题目链接:334. 递增的三元子序列给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。输入:nums = [2,1,5,0,4,6]输出:true解释:三元组 (3, 4, 5) 满足题意,因为 nums[3] == 0 < nums[4] == 4 &
2022-01-12 16:41:41
196
原创 Leetcode 93 复原 IP 地址
原题链接:93. 复原 IP 地址有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入'.' 来.
2022-01-07 10:07:18
850
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人