Redis Zset类型

Redis Zset类型

Zset(有序集合)它是集合的一种,不仅可以保存元素,还可以为每个元素关联一个 double 类型的分数(score),Redis 正是通过分数来为集合中的元素进行从小到大的排序。在 Zset 中,元素的值是唯一的,但分数(score)却可以重复。

有序集合:该有序集合显示了三国中的武将的武力

在这里插入图片描述

有序集合提供了获取指定分数和元素范围查找、计算成员排名等功能,合理地利用有序集合,可以帮助我们在实际开发中解决很多问题。

列表、集合、有序集合三者的异同点:

在这里插入图片描述

Zset命令

zadd

zadd 用于添加或者更新指定的元素以及关联的分数到 Zset 中,分数应该符合 double 类型,+inf/-inf作为正负极限也是合法的。

语法:

ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
  • key: 有序集合的键名。
  • score: 成员的分数。
  • member: 要添加到有序集合的成员。

相关选项

XX:仅仅用于更新已经存在的元素,不会添加新元素。

NX:仅用于添加新元素,不会更新已经存在的元素。

CH:默认情况下,ZADD 返回的是本次添加的元素个数,但指定这个选项之后,就会还包含本次更新的元素的个数。

INCR:此时命令类似 ZINCRBY 的效果,将元素的分数加上指定的分数。此时只能指定⼀个元素和分数。

时间复杂度:O(log(N))

返回值:本次添加成功的元素个数。

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 1 "uno"
(integer) 1
redis> zadd myzset 2 "two" 3 "three"
(integer) 2
redis> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
redis> zadd myzset 10 one 20 two 30 three
(integer) 0
redis> zrange myzset 0 -1 withscores
1) "uno"
2) "1"
3) "one"
4) "10"
5) "two"
6) "20"
7) "three"
8) "30"
#CH选项-包含本次更新的元素的个数
redis> zadd myzset CH 100 one 200 two 300 three  
(integer) 3
redis> zrange myzset 0 -1 withscores
1) "uno"
2) "1"
3) "one"
4) "100"
5) "two"
6) "200"
7) "three"
8) "300"
redis> zadd myzset XX 1 one 2 two 3 three 4 four 5 five
(integer) 0
redis> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
redis> zadd myzset NX 100 one 200 two 300 three 400 four 500 five
(integer) 2
redis> zrange myzset 0 -1 withscores
# NX-只添加,不更新,只添加了 four 和 five
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
9) "four"
10) "400"
11) "five"
12) "500"
redis> zadd myzset INCR 10 one
"11"
redis> zrange myzset 0 -1 withscores
1) "uno"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "one"
8) "11"
9) "four"
10) "400"
11) "five"
12) "500"
redis> zadd myzset -inf "negative infinity" +inf "positive infinity"
(integer) 2
redis> zrange myzset 0 -1 withscores
# -inf 无穷小 +inf 无穷大
1) "negative infinity"
2) "-inf"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
9) "one"
10) "11"
11) "four"
12) "400"
13) "five"
14) "500"
15) "positive infinity"
16) "inf"

zcard

zcard 用于获取⼀个 zset 的基数(cardinality),即 zset 中的元素个数。

语法:

ZCARD key

时间复杂度:O(1)

返回值:zset 内的元素个数。

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zcard myzset
(integer) 2

zcount

返回分数在 min 和 max 之间的元素个数,默认情况下,min 和 max 都是包含的,可以通过 ( 排除。

语法:

ZCOUNT key min max

时间复杂度:O(log(N))

返回值:满⾜条件的元素列表个数。

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zadd myzset 3 "three"
(integer) 1
redis> zcount myzset -inf +inf
(integer) 3
redis> zcount myzset 1 3
(integer) 3
# 通过 (表示开区间
redis> zcount myzset (1 3
(integer) 2
redis> zcount myzset (1 (3
(integer) 1

zrange

返回指定区间里的元素,分数按照升序。带上 withscores 可以把分数也返回。

语法

ZRANGE key start stop [WITHSCORES]

此处的 [start, stop] 为下标构成的区间. 从 0 开始, ⽀持负数.

时间复杂度:O(log(N)+M)

返回值:区间内的元素列表。

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zadd myzset 3 "three"
(integer) 1
redis> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
redis> zrange myzset 0 -1
1) "one"
2) "two"
3) "three"
redis> zrange myzset 2 3
1) "three"
redis> zrange myzset -2 -1
1) "two"
2) "three"

zrevrange

返回指定区间里的元素,分数按照降序。带上 withscores 可以把分数也返回。

备注:这个命令可能在 6.2.0 之后废弃,并且功能合并到 zrange 中。

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zadd myzset 3 "three"
(integer) 1
redis> zrevrange myzset 0 -1 withscores 
1) "three"
2) "3"
3) "two"
4) "2"
5) "one"
6) "1"
redis> zrevrange myzset 0 -1
1) "three"
2) "two"
3) "one"
redis> zrevrange myzset 2 3
1) "one"
redis> zrevrange myzset -2 -1
1) "two"
2) "one"

zrangebyscore

返回分数在 min 和 max 之间的元素,默认情况下,min 和 max 都是包含的,可以通过 ( 排除。

语法:

ZRANGEBYSCORE key min max [WITHSCORES]

时间复杂度:O(log(N)+M)

返回值:区间内的元素列表。

示例:

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zadd myzset 3 "three"
(integer) 1
redis> zrangebyscore myzset -inf +inf
1) "one"
2) "two"
3) "three"
redis> zrangebyscore myzset 1 2
1) "one"
2) "two"
redis> zrangebyscore myzset (1 2
1) "two"                   
redis> zrangebyscore myzset (1 (2
(empty array)

zpopmax

删除并返回分数最高的 count 个元素。

语法:

ZPOPMAX key [count]

时间复杂度:O(log(N) * M)

返回值:分数和元素列表。

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zadd myzset 3 "three"
(integer) 1
redis> zpopmax myzset
1) "three"
2) "3"

bzpopmax

zpopmax 的阻塞版本。它会持续阻塞连接,直到有成员可以被弹出或达到超时时间。

语法:

BZPOPMAX key [key ...] timeout

timeout: 最大阻塞时间,以秒为单位,表示如果在此时间内没有元素弹出,命令将会超时。

时间复杂度:O(log(N))

返回值:元素列表,如果在超时之前没有可用的成员,命令将返回 null

示例

redis> bzpopmax set1 set2 10 set1 set2 10

这条命令将阻塞等待最多10秒钟,如果 set1set2 中有成员,它将返回其中分数最高的成员。如果超过10秒仍然没有可弹出的成员,命令将超时返回空响应。

zpopmin

删除并返回分数最低的 count 个元素。

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zadd myzset 3 "three"
(integer) 1
redis> zpopmin myzset
1) "one"
2) "1"

bzpopmin

zpopmin 的阻塞版本。

示例

redis> del zset1 zset2
(integer) 0
redis> zadd zset1 0 a 1 b 2 c
(integer) 3
redis> bzpopmin zset1 zset2 0
1) "zset1"
2) "a"
3) "0"

zrank

返回指定元素的排名,升序。排名有0开始

语法

ZRANK key member

时间复杂度:O(log(N))

返回值:排名。 没有则,返回nil

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zadd myzset 3 "three"
(integer) 1
redis> zrank myzset "three"
(integer) 2
redis> zrank myzset "four"
(nil)

zrevrank

返回指定元素的排名,降序。排名有0开始

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zadd myzset 3 "three"
(integer) 1
redis> zrevrank myzset "one"
(integer) 2
redis> zrevrank myzset "four"                          
(nil)

zscore

返回指定元素的分数。

语法

ZSCORE key member

时间复杂度:O(1)

返回值:分数。

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zscore myzset "one"
"1"

zrem

删除指定的元素。

语法

ZREM key member [member ...]

时间复杂度:O(M*log(N))

返回值:本次操作删除的元素个数。

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zadd myzset 3 "three"
(integer) 1
redis> zrem myzset "two"
(integer) 1
redis> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "three"
4) "3"

zremrangebyrank

按照排序,升序删除指定范围的元素,左闭右闭。

语法

ZREMRANGEBYRANK key start stop

时间复杂度:O(log(N)+M)

返回值:本次操作删除的元素个数。

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zadd myzset 3 "three"
(integer) 1
redis> zremrangebyrank myzset 0 1
(integer) 2
redis> zrange myzset 0 -1 withscores
1) "three"
2) "3"

zremrangebyscore

按照分数删除指定范围的元素,左闭右闭。

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zadd myzset 3 "three"
(integer) 1
# 表示 无穷小到1的范围,不包括2
redis> zremrangebyscore myzset -inf (2   
(integer) 1
redis> zrange myzset 0 -1 withscores
1) "two"
2) "2"
3) "three"
4) "3"

zincrby

为指定的元素的关联分数增加或减少指定的分数值。

语法

ZINCRBY key increment member
  • increment 为正数表示增加,负数表示减少

时间复杂度:O(log(N))

返回值:增加后元素的分数。

示例

redis> zadd myzset 1 "one"
(integer) 1
redis> zadd myzset 2 "two"
(integer) 1
redis> zincrby myzset 2 "one"
"3"
redis> zrange myzset 0 -1 withscores
1) "two"
2) "2"
3) "one"
4) "3"
redis> zincrby myzset -2 "one"    # -2 负数表示减少
"1"
redis> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"

集合间操作

交集

有序集合的交集操作

在这里插入图片描述

zinterstore

zinterstore 求出给定有序集合中元素的交集并保存进目标有序集合中,在合并过程中以元素为单位进行合并,元 素对应的分数按照不同的聚合方式和权重得到新的分数。

语法

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
  • destination:结果将存储在这个键中。
  • numkeys:要进行交集的输入键(有序集合)的数量。
  • key:一个有序集合的名称。
  • WEIGHTS:一个可选的关键字,后面跟着在交集操作中应用于有序集合的权重。
  • AGGREGATE:一个可选的关键字,指定如何聚合交集元素的分数。可以是 SUMMINMAX

时间复杂度:O(N×K)+O(M×log(M)) N 是输入的有序集合中, 最小的有序集合的元素个数; K 是输入了几个有序集合; M 是最终结果的有序集合的元素个数.

返回值:目标集合中的元素个数

示例

redis> zadd zset1 1 "one"
(integer) 1
redis> zadd zset1 2 "two"
(integer) 1
redis> zadd zset2 1 "one"
(integer) 1
redis> zadd zset2 2 "two"
(integer) 1
redis> zadd zset2 3 "three"
(integer) 1
# 交集时,zset1 的元素的分数会乘以 2,而 zset2 的元素的分数会乘以 3。
redis> zinterstore out 2 zset1 zset2 weights 2 3
(integer) 2
redis> zrange out 0 -1 withscores
1) "one"
2) "5"    # 1×2+1×3=2+3=5
3) "two"
4) "10"

并集

有序集合的并集操作

在这里插入图片描述

zunionstore

zunionstore 求出给定有序集合中元素的并集并保存进目标有序集合中,在合并过程中以元素为单位进行合并,元 素对应的分数按照不同的聚合方式和权重得到新的分数。

语法

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
  • destination:结果将存储在这个键中,即新的有序集合的名称。
  • numkeys:要进行并集计算的输入键(有序集合)的数量。
  • key:一个有序集合的名称。
  • WEIGHTS:一个可选的关键字,后面跟着在并集操作中应用于有序集合的权重。
  • AGGREGATE:一个可选的关键字,指定如何聚合并集元素的分数。可以是 SUMMINMAX

时间复杂度:O(N)+O(M*log(M)) N 是输入的有序集合总的元素个数; M 是最终结果的有序集合的元素个数.

返回值:目标集合中的元素个数

示例

redis> zadd zset1 1 "one"
(integer) 1
redis> zadd zset1 2 "two"
(integer) 1
redis> zadd zset2 1 "one"
(integer) 1
redis> zadd zset2 2 "two"
(integer) 1
redis> zadd zset2 3 "three"
(integer) 1
# zset1 整体 * 2    zset2 整体 * 3
redis> zunionstore out 2 zset1 zset2 weights 2 3
(integer) 3
redis> zrange out 0 -1 withscores
1) "one"
2) "5"
3) "three"
4) "9"
5) "two"
6) "10"

内部编码

有序集合类型的内部编码有两种:

  • ziplist(压缩列表):当有序集合的元素个数小于 zset-max-ziplist-entries 配置(默认 128 个), 同时每个元素的值都小于 zset-max-ziplist-value 配置(默认 64 字节)时,Redis 会用 ziplist 来作为有序集合的内部实现,ziplist 可以有效减少内存的使用。
  • skiplist(跳表):当 ziplist 条件不满足时,有序集合会使用 skiplist 作为内部实现,因为此时 ziplist 的操作效率会下降。

1)当元素个数较少且每个元素较小时,内部编码为 ziplist:

127.0.0.1:6379> zadd zsetkey 50 e1 60 e2 30 e3
(integer) 3
127.0.0.1:6379> object encoding zsetkey
"ziplist"

2)当元素个数超过 128 个,内部编码 skiplist:

127.0.0.1:6379> zadd zsetkey 50 e1 60 e2 30 e3 ... 省略 ... 82 e129
(integer) 129
127.0.0.1:6379> object encoding zsetkey
"skiplist"

3)当某个元素⼤于 64 字节时,内部编码 skiplist:

127.0.0.1:6379> zadd zsetkey 50 "one string bigger than 64 bytes ... 省略 ..."
(integer) 1
127.0.0.1:6379> object encoding zsetkey
"skiplist"

使用场景

有序集合比较典型的使⽤场景就是排行榜系统。例如常见的网站上的热榜信息,榜单的维度可能是多方面的:按照时间、按照阅读量、按照点赞量。本例中我们使用点赞数这个维度,维护每天的热榜:

1)添加用户赞数

例如用户 james 发布了一篇文章,并获得3个赞,可以使用有序集合的 zadd 和 zincrby 功能::

zadd user:ranking:2022-03-15 3 james

之后如果再获得赞,可以使用 zincrby:

zincrby user:ranking:2022-03-15 1 james

2)取消用户赞数

由于各种原因(例如用户注销、用户作弊等)需要将用户删除,此时需要将用户从榜单中删除掉,可以使用 zrem。例如删除成员 tom:

zrem user:ranking:2022-03-15 tom

3)展示获取赞数最多的 10 个用户

此功能使用 zrevrange 命令实现:

zrevrangebyrank user:ranking:2022-03-15 0 9

4)展示用户信息以及用户分数

此功能将用户名作为键后缀,将用户信息保存在哈希类型中,至于用户的分数和排名可以使用 zscore 和 zrank 来实现。

hgetall user:info:tom
zscore user:ranking:2022-03-15 mike
zrank user:ranking:2022-03-15 mike

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/311394.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1.11.。。。

1 有道云笔记 2 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QTextToSpeech>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QW…

STL之vector

目录 vector的定义和特性 vector的定义和结构非常简单&#xff0c;它由以下几个重要的部分组成&#xff1a; vector的常用函数 vector排序去重 排序 去重 代码示例 vector的定义和特性 在c中&#xff0c;vector是一个动态数组容器&#xff0c;可以存储一系列相同类型的…

【Docker】Linux中Docker技术入门与实战及实用的常规命令

目录 一、引言 1. 说明&#xff1a; 2. Linux介绍 3. Docker简介 二、Docker三要素 1. 镜像&#xff08;Image&#xff09; 2. 容器&#xff08;Container&#xff09; 3. 仓库&#xff08;Repository&#xff09; 三、实现案例 1. 创建 2. 设置镜像 3. 开启设置 …

基于自适应遗传算法的车间调度matlab仿真,可以任意调整工件数和机器数,输出甘特图

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 编码与初始化 4.2 适应度函数 4.3 遗传操作 4.4 自适应机制 4.5 终止条件 5.完整程序 1.程序功能描述 基于自适应遗传算法的车间调度matlab仿真,可以任意调整工件数和机器数,输出甘…

【AI】搭建Windows Linux子系统(WSL2)CUDA环境

0.准备工作 Windows本机安装CUDA Driver 首先去下载页面下载驱动文件 点击Get CUDA Driver进入下载页面&#xff0c;我看下载页面跟普通驱动下载页面相同&#xff0c;感觉应该不是单独的驱动&#xff0c;只要之前显卡已经安装好了CUDA的驱动&#xff0c;就可以先省略这一步。…

4024A/B/C/D/E/F/G/H/L频谱分析仪

01 4024A/B/C/D/E/F/G/H/L频谱分析仪 产品综述&#xff1a; 4024频谱分析仪系列产品具有工作频段宽、性能指标高、扫描速度快、测试功能多、操作简便等多重优点&#xff0c;性能指标方面具有优良的平均噪声电平、相位噪声以及扫描速度&#xff0c;测量功能方面具有频谱分析、…

NetSuite 收入管理模块与总账的数据一致性检查

收入管理模块是NetSuite的一个艰深功能领域&#xff0c;能够有所实践&#xff0c;知原理懂变化的实施顾问少之又少。很高兴&#xff0c;我们的财务顾问Chris在23年底经历了一次深入的NetSuite收入管理模块的实践&#xff0c;对收入管理模块与总账递延收入和收入数据的一致性检查…

MySQL中order by是怎么工作的?

在如上图中所示的explain的执行结果中&#xff0c;Extra字段中的“Using filesort”表示的就是需要排序&#xff0c;MySQL会给每个线程分配一块内存用于排序&#xff0c;称为sort_buffer。 索引city如上图所示 上述语句的执行流程如下&#xff1a; 1、初始化sort_buffer&…

由于找不到msvcp140.dll无法继续执行代码原因及解决教程分享

在计算机打开软件过程&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“由于找不到msvcp140.dll无法继续执行代码”。这个错误通常发生在使用Microsoft Visual C 2015或更高版本编译的程序运行时。那么&#xff0c;什么是msvcp140.dll文件&#xff1f;为什么会…

竞赛保研 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的行人重识别 该项目较为新颖&#xff0c;适合…

中国社科院大学与美国杜兰大学金融管理硕士项目——熬过寒冬,春日暖阳已不远

在金融领域&#xff0c;寒冬似乎成了无法避免的阶段。然而&#xff0c;对于那些坚守岗位的金融从业者来说&#xff0c;熬过寒冬并非无望。正如冬去春来&#xff0c;只要我们采取明智的策略&#xff0c;迈出坚定的步伐&#xff0c;春日的暖阳已在不远方照耀。社科院与美国杜兰大…

2023检索增强生成技术(RAG)研究进展

一、前言 在过去的一两年里&#xff0c;人工智能领域目睹了检索增强生成技术&#xff08;RAG&#xff09;的迅猛发展&#xff0c;这种技术结合了强大的语言模型与信息检索系统&#xff0c;以期在复杂的问题解决和信息处理任务中提供更加精确和深入的答案。正是这种对前沿科技的…

Android通过Recyclerview实现流式布局自适应列数及高度

调用 FlowAdapter 跟普通recyclerview一样使用 RecyclerView rvLayout holder.getView(R.id.spe_tag_layout); FlowAdapter rvAdapter new FlowAdapter(); FlowLayoutManager flowLayoutManager new FlowLayoutManager(); rvLayout.setLayoutManager(flowLayoutManager); r…

二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)

讲了这么多数据结构相关的知识(可以看我的数据结构文章专栏): 抓紧刷题巩固一下了 目录 1.单值二叉树 题目描述 思路1 代码1 思路2 代码2 2.相同的树 题目描述 思路 代码 3.二叉树的前序遍历 代码 思路 1.单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCod…

Linux网络编程(一-网络相关知识点)

目录 一、网络相关知识简介 二、网络协议的分层模型 2.1 OSI七层模型 2.2 TCP/IP五层模型 2.3 协议层报文间的封装与拆封 三、IP协议 3.1 MAC地址 3.2 IP地址 3.3 MAC地址与IP地址区别 一、网络相关知识简介 互联网通信的本质是数字通信&#xff0c;任何数字通信都离…

Redis命令总结

1、启动Redis服务&#xff0c;登录Redis # 开启redis服务 redis-server redis配置文件路径例子&#xff1a; redis-server redis.windows.conf# 连接redis 【无密码】 redis-cli# 连接redis【有密码】 # 1 先连接再输入密码 redis-cli auth 密码 2、连接时输入 IP址、端口号、…

Handsfree_ros_imu:ROS机器人IMU模块ARHS姿态传感器(A9)Liunx系统Ubuntu20.04学习启动和运行教程

这个是篇学习 Handsfree_ros_imu 传感器的博客记录 官方教程链接见&#xff1a; https://docs.taobotics.com/docs/hfi-imu/ 产品功能 IMU 内有 加速度计&#xff0c;陀螺仪&#xff0c;磁力计这些传感器&#xff0c;通过固定 imu 到物体上后&#xff0c;可以获取物体在运动…

力扣LCR 166. 珠宝的最高价值(java 动态规划)

Problem: LCR 166. 珠宝的最高价值 文章目录 解题思路思路解题方法复杂度Code 解题思路 思路 改题目与本站64题实质上是一样的&#xff0c;该题目在64题的基础上将求取最小路径和改成了求取最大路径和。具体实现思路如下&#xff1a; 1.定义一个int类型的二维数组dp大小为给定…

代码随想录第五十五天——判断子序列,不同的子序列

leetcode 392. 判断子序列 题目链接&#xff1a;判断子序列 确定dp数组及下标的含义 dp[i][j]&#xff1a;以下标i-1为结尾的字符串s&#xff0c;和以下标j-1为结尾的字符串t&#xff0c;相同子序列长度为dp[i][j]确定递推公式 分为两种情况&#xff1a;s[i - 1] 与t[j - 1]相…

一起学习python类的属性装饰器@property

之前文章我们介绍了class的一些通用功能&#xff0c;比如类属性/类方法/实例属性/实例方法等&#xff0c;之前的属性可以直接修改和访问&#xff08;设置私有属性&#xff0c;不能直接访问,可通过对象名._[类名][属性名]的方式访问&#xff09;&#xff0c;没有一些权限的控制逻…