哈希表题目:设计地铁系统
文章目录
- 题目
- 标题和出处
- 难度
- 题目描述
- 要求
- 示例
- 数据范围
- 解法
- 思路和算法
- 代码
- 复杂度分析
题目
标题和出处
标题:设计地铁系统
出处:1396. 设计地铁系统
难度
6 级
题目描述
要求
一个地铁系统正在收集乘客在不同站之间的花费时间。他们在使用这些数据计算从一个地铁站到另一个地铁站的平均花费时间。
实现 UndergroundSystem \texttt{UndergroundSystem} UndergroundSystem 类:
- void checkIn(int id, string stationName, int t) \texttt{void checkIn(int id, string stationName, int t)} void checkIn(int id, string stationName, int t)
- 卡号为 id \texttt{id} id 的乘客在 t \texttt{t} t 时刻进入地铁站 stationName \texttt{stationName} stationName。
- 一个乘客在同一时间只能进入一个地点。
- void checkOut(int id, string stationName, int t) \texttt{void checkOut(int id, string stationName, int t)} void checkOut(int id, string stationName, int t)
- 卡号为 id \texttt{id} id 的乘客在 t \texttt{t} t 时刻离开地铁站 stationName \texttt{stationName} stationName。
- double getAverageTime(string startStation, string endStation) \texttt{double getAverageTime(string startStation, string endStation)} double getAverageTime(string startStation, string endStation)
- 返回从地铁站 startStation \texttt{startStation} startStation 到地铁站 endStation \texttt{endStation} endStation 的平均花费时间。
- 平均时间计算的行程包括当前为止所有从 startStation \texttt{startStation} startStation 直接到达 endStation \texttt{endStation} endStation 的行程,即进入地铁站 startStation \texttt{startStation} startStation 之后离开地铁站 endStation \texttt{endStation} endStation。
- 从地铁站 startStation \texttt{startStation} startStation 到地铁站 endStation \texttt{endStation} endStation 的花费时间可能不同于从地铁站 endStation \texttt{endStation} endStation 到地铁站 startStation \texttt{startStation} startStation 的花费时间。
- 调用 getAverageTime \texttt{getAverageTime} getAverageTime 时,至少已经有一个乘客从地铁站 startStation \texttt{startStation} startStation 乘坐到地铁站 endStation \texttt{endStation} endStation。
你可以假设所有对 checkIn \texttt{checkIn} checkIn 和 checkOut \texttt{checkOut} checkOut 的调用都是符合逻辑的。如果一个乘客在 t 1 \texttt{t}_\texttt{1} t1 时刻进入某个地铁站并在 t 2 \texttt{t}_\texttt{2} t2 时刻离开某个地铁站,那么 t 1 < t 2 \texttt{t}_\texttt{1} < \texttt{t}_\texttt{2} t1<t2。所有的事件都按时间顺序给出。
示例
示例 1:
输入:
["UndergroundSystem","checkIn","checkIn","checkIn","checkOut","checkOut","checkOut","getAverageTime","getAverageTime","checkIn","getAverageTime","checkOut","getAverageTime"] \texttt{["UndergroundSystem","checkIn","checkIn","checkIn","checkOut","checkOut","checkOut","getAverageTime","getAverageTime","checkIn","getAverageTime","checkOut","getAverageTime"]} ["UndergroundSystem","checkIn","checkIn","checkIn","checkOut","checkOut","checkOut","getAverageTime","getAverageTime","checkIn","getAverageTime","checkOut","getAverageTime"]
[[],[45,"Leyton",3],[32,"Paradise",8],[27,"Leyton",10],[45,"Waterloo",15],[27,"Waterloo",20],[32,"Cambridge",22],["Paradise","Cambridge"],["Leyton","Waterloo"],[10,"Leyton",24],["Leyton","Waterloo"],[10,"Waterloo",38],["Leyton","Waterloo"]] \texttt{[[],[45,"Leyton",3],[32,"Paradise",8],[27,"Leyton",10],[45,"Waterloo",15],[27,"Waterloo",20],[32,"Cambridge",22],["Paradise","Cambridge"],["Leyton","Waterloo"],[10,"Leyton",24],["Leyton","Waterloo"],[10,"Waterloo",38],["Leyton","Waterloo"]]} [[],[45,"Leyton",3],[32,"Paradise",8],[27,"Leyton",10],[45,"Waterloo",15],[27,"Waterloo",20],[32,"Cambridge",22],["Paradise","Cambridge"],["Leyton","Waterloo"],[10,"Leyton",24],["Leyton","Waterloo"],[10,"Waterloo",38],["Leyton","Waterloo"]]
输出:
[null,null,null,null,null,null,null,14.00000,11.00000,null,11.00000,null,12.00000] \texttt{[null,null,null,null,null,null,null,14.00000,11.00000,null,11.00000,null,12.00000]} [null,null,null,null,null,null,null,14.00000,11.00000,null,11.00000,null,12.00000]
解释:
UndergroundSystem undergroundSystem = new UndergroundSystem(); \texttt{UndergroundSystem undergroundSystem = new UndergroundSystem();} UndergroundSystem undergroundSystem = new UndergroundSystem();
undergroundSystem.checkIn(45, "Leyton", 3); \texttt{undergroundSystem.checkIn(45, "Leyton", 3);} undergroundSystem.checkIn(45, "Leyton", 3);
undergroundSystem.checkIn(32, "Paradise", 8); \texttt{undergroundSystem.checkIn(32, "Paradise", 8);} undergroundSystem.checkIn(32, "Paradise", 8);
undergroundSystem.checkIn(27, "Leyton", 10); \texttt{undergroundSystem.checkIn(27, "Leyton", 10);} undergroundSystem.checkIn(27, "Leyton", 10);
undergroundSystem.checkOut(45, "Waterloo", 15); \texttt{undergroundSystem.checkOut(45, "Waterloo", 15);} undergroundSystem.checkOut(45, "Waterloo", 15); // 乘客 45 \texttt{45} 45 从 "Leyton" \texttt{"Leyton"} "Leyton" 到 "Waterloo" \texttt{"Waterloo"} "Waterloo" 的时间是 15 - 3 = 12 \texttt{15 - 3 = 12} 15 - 3 = 12
undergroundSystem.checkOut(27, "Waterloo", 20); \texttt{undergroundSystem.checkOut(27, "Waterloo", 20);} undergroundSystem.checkOut(27, "Waterloo", 20); // 乘客 27 \texttt{27} 27 从 "Leyton" \texttt{"Leyton"} "Leyton" 到 "Waterloo" \texttt{"Waterloo"} "Waterloo" 的时间是 20 - 10 = 10 \texttt{20 - 10 = 10} 20 - 10 = 10
undergroundSystem.checkOut(32, "Cambridge", 22); \texttt{undergroundSystem.checkOut(32, "Cambridge", 22);} undergroundSystem.checkOut(32, "Cambridge", 22); // 乘客 32 \texttt{32} 32 从 "Paradise" \texttt{"Paradise"} "Paradise" 到 "Cambridge" \texttt{"Cambridge"} "Cambridge" 的时间是 22 - 8 = 14 \texttt{22 - 8 = 14} 22 - 8 = 14
undergroundSystem.getAverageTime("Paradise", "Cambridge"); \texttt{undergroundSystem.getAverageTime("Paradise", "Cambridge");} undergroundSystem.getAverageTime("Paradise", "Cambridge"); // 返回 14.00000 \texttt{14.00000} 14.00000。从 "Paradise" \texttt{"Paradise"} "Paradise" 到 "Cambridge" \texttt{"Cambridge"} "Cambridge" 的行程有 1 \texttt{1} 1 个, (14) / 1 = 14 \texttt{(14) / 1 = 14} (14) / 1 = 14
undergroundSystem.getAverageTime("Leyton", "Waterloo"); \texttt{undergroundSystem.getAverageTime("Leyton", "Waterloo");} undergroundSystem.getAverageTime("Leyton", "Waterloo"); // 返回 11.00000 \texttt{11.00000} 11.00000。从 "Leyton" \texttt{"Leyton"} "Leyton" 到 "Waterloo" \texttt{"Waterloo"} "Waterloo" 的行程有 2 \texttt{2} 2 个, (10 + 12) / 2 = 11 \texttt{(10 + 12) / 2 = 11} (10 + 12) / 2 = 11
undergroundSystem.checkIn(10, "Leyton", 24); \texttt{undergroundSystem.checkIn(10, "Leyton", 24);} undergroundSystem.checkIn(10, "Leyton", 24);
undergroundSystem.getAverageTime("Leyton", "Waterloo"); \texttt{undergroundSystem.getAverageTime("Leyton", "Waterloo");} undergroundSystem.getAverageTime("Leyton", "Waterloo"); // 返回 11.00000 \texttt{11.00000} 11.00000
undergroundSystem.checkOut(10, "Waterloo", 38); \texttt{undergroundSystem.checkOut(10, "Waterloo", 38);} undergroundSystem.checkOut(10, "Waterloo", 38); // 乘客 10 \texttt{10} 10 从 "Leyton" \texttt{"Leyton"} "Leyton" 到 "Waterloo" \texttt{"Waterloo"} "Waterloo" 的时间是 38 - 24 = 14 \texttt{38 - 24 = 14} 38 - 24 = 14
undergroundSystem.getAverageTime("Leyton", "Waterloo"); \texttt{undergroundSystem.getAverageTime("Leyton", "Waterloo");} undergroundSystem.getAverageTime("Leyton", "Waterloo"); // 返回 12.00000 \texttt{12.00000} 12.00000。从 "Leyton" \texttt{"Leyton"} "Leyton" 到 "Waterloo" \texttt{"Waterloo"} "Waterloo" 的行程有 3 \texttt{3} 3 个, (10 + 12 + 14) / 3 = 12 \texttt{(10 + 12 + 14) / 3 = 12} (10 + 12 + 14) / 3 = 12
示例 2:
输入:
["UndergroundSystem","checkIn","checkOut","getAverageTime","checkIn","checkOut","getAverageTime","checkIn","checkOut","getAverageTime"] \texttt{["UndergroundSystem","checkIn","checkOut","getAverageTime","checkIn","checkOut","getAverageTime","checkIn","checkOut","getAverageTime"]} ["UndergroundSystem","checkIn","checkOut","getAverageTime","checkIn","checkOut","getAverageTime","checkIn","checkOut","getAverageTime"]
[[],[10,"Leyton",3],[10,"Paradise",8],["Leyton","Paradise"],[5,"Leyton",10],[5,"Paradise",16],["Leyton","Paradise"],[2,"Leyton",21],[2,"Paradise",30],["Leyton","Paradise"]] \texttt{[[],[10,"Leyton",3],[10,"Paradise",8],["Leyton","Paradise"],[5,"Leyton",10],[5,"Paradise",16],["Leyton","Paradise"],[2,"Leyton",21],[2,"Paradise",30],["Leyton","Paradise"]]} [[],[10,"Leyton",3],[10,"Paradise",8],["Leyton","Paradise"],[5,"Leyton",10],[5,"Paradise",16],["Leyton","Paradise"],[2,"Leyton",21],[2,"Paradise",30],["Leyton","Paradise"]]
输出:
[null,null,null,5.00000,null,null,5.50000,null,null,6.66667] \texttt{[null,null,null,5.00000,null,null,5.50000,null,null,6.66667]} [null,null,null,5.00000,null,null,5.50000,null,null,6.66667]
解释:
UndergroundSystem undergroundSystem = new UndergroundSystem(); \texttt{UndergroundSystem undergroundSystem = new UndergroundSystem();} UndergroundSystem undergroundSystem = new UndergroundSystem();
undergroundSystem.checkIn(10, "Leyton", 3); \texttt{undergroundSystem.checkIn(10, "Leyton", 3);} undergroundSystem.checkIn(10, "Leyton", 3);
undergroundSystem.checkOut(10, "Paradise", 8); \texttt{undergroundSystem.checkOut(10, "Paradise", 8);} undergroundSystem.checkOut(10, "Paradise", 8); // 乘客 10 \texttt{10} 10 从 "Leyton" \texttt{"Leyton"} "Leyton" 到 "Paradise" \texttt{"Paradise"} "Paradise" 的时间是 8 - 3 = 5 \texttt{8 - 3 = 5} 8 - 3 = 5
undergroundSystem.getAverageTime("Leyton", "Paradise"); \texttt{undergroundSystem.getAverageTime("Leyton", "Paradise");} undergroundSystem.getAverageTime("Leyton", "Paradise"); // 返回 5.00000 \texttt{5.00000} 5.00000。 (5) / 1 = 5 \texttt{(5) / 1 = 5} (5) / 1 = 5
undergroundSystem.checkIn(5, "Leyton", 10); \texttt{undergroundSystem.checkIn(5, "Leyton", 10);} undergroundSystem.checkIn(5, "Leyton", 10);
undergroundSystem.checkOut(5, "Paradise", 16); \texttt{undergroundSystem.checkOut(5, "Paradise", 16);} undergroundSystem.checkOut(5, "Paradise", 16); // 乘客 5 \texttt{5} 5 从 "Leyton" \texttt{"Leyton"} "Leyton" 到 "Paradise" \texttt{"Paradise"} "Paradise" 的时间是 16 - 10 = 6 \texttt{16 - 10 = 6} 16 - 10 = 6
undergroundSystem.getAverageTime("Leyton", "Paradise"); \texttt{undergroundSystem.getAverageTime("Leyton", "Paradise");} undergroundSystem.getAverageTime("Leyton", "Paradise"); // 返回 5.50000 \texttt{5.50000} 5.50000。 (5 + 6) / 2 = 5.5 \texttt{(5 + 6) / 2 = 5.5} (5 + 6) / 2 = 5.5
undergroundSystem.checkIn(2, "Leyton", 21); \texttt{undergroundSystem.checkIn(2, "Leyton", 21);} undergroundSystem.checkIn(2, "Leyton", 21);
undergroundSystem.checkOut(2, "Paradise", 30); \texttt{undergroundSystem.checkOut(2, "Paradise", 30);} undergroundSystem.checkOut(2, "Paradise", 30); // 乘客 2 \texttt{2} 2 从 "Leyton" \texttt{"Leyton"} "Leyton" 到 "Paradise" \texttt{"Paradise"} "Paradise" 的时间是 30 - 21 = 9 \texttt{30 - 21 = 9} 30 - 21 = 9
undergroundSystem.getAverageTime("Leyton", "Paradise"); \texttt{undergroundSystem.getAverageTime("Leyton", "Paradise");} undergroundSystem.getAverageTime("Leyton", "Paradise"); // 返回 6.66667 \texttt{6.66667} 6.66667。 (5 + 6 + 9) / 3 = 6.66667 \texttt{(5 + 6 + 9) / 3 = 6.66667} (5 + 6 + 9) / 3 = 6.66667
数据范围
- 1 ≤ id, t ≤ 10 6 \texttt{1} \le \texttt{id, t} \le \texttt{10}^\texttt{6} 1≤id, t≤106
- 1 ≤ stationName.length, startStation.length, endStation.length ≤ 10 \texttt{1} \le \texttt{stationName.length, startStation.length, endStation.length} \le \texttt{10} 1≤stationName.length, startStation.length, endStation.length≤10
- 所有的字符串包含大写字母、小写字母和数字
- 总共最多调用 2 × 10 4 \texttt{2} \times \texttt{10}^\texttt{4} 2×104 次 checkIn \texttt{checkIn} checkIn、 checkOut \texttt{checkOut} checkOut 和 getAverageTime \texttt{getAverageTime} getAverageTime
- 与标准答案误差在 10 -5 \texttt{10}^\texttt{-5} 10-5 以内的结果都视为正确结果
解法
思路和算法
这道题要求收集乘客在不同站之间的花费时间,并根据这些数据计算从一个地铁站到另一个地铁站的平均花费时间。
一个乘客在 t 1 t_1 t1 时刻进入地铁站 s 1 s_1 s1,然后在 t 2 t_2 t2 时刻离开地铁站 s 2 s_2 s2,则该乘客从地铁站 s 1 s_1 s1 到地铁站 s 2 s_2 s2 的花费时间是 t 2 − t 1 t_2 - t_1 t2−t1。为了记录乘客在不同站之间的花费时间,需要使用哈希表记录每个乘客的卡号以及该乘客进入的地铁站和进站时刻,当乘客离开另一个地铁站时,可以根据乘客的卡号得到该乘客进入的地铁站和进站时刻,结合乘客离开的地铁站和出站时刻即可得到由起点和终点组成的旅程信息,以及花费时间。
为了计算两个特定地铁站之间的平均花费时间,需要使用哈希表记录每个旅程以及该旅程的总时间与次数。当乘客离开地铁站时,即可得到该乘客的旅程信息和花费时间,将该旅程的总时间加上该乘客的花费时间,将该旅程的次数加 1 1 1,总时间除以次数即为该旅程的平均花费时间。
基于上述分析,需要维护两个哈希表,分别记录进站信息和旅程时间。
构造方法中,将两个哈希表初始化。
对于 checkIn \textit{checkIn} checkIn 操作,根据站名和时刻构造进站信息,将卡号和进站信息存入进站信息哈希表。
对于 checkOut \textit{checkOut} checkOut 操作,根据卡号 id \textit{id} id 从进站信息哈希表中得到进站信息,从进站信息得到进入的地铁站 startStation \textit{startStation} startStation 和进站时刻 startTime \textit{startTime} startTime,结合离开的地铁站 stationName \textit{stationName} stationName 和出站时刻 t t t,得到旅程为进入的地铁站和离开的地铁站拼接之后的字符串,花费时间为 t − startTime t - \textit{startTime} t−startTime,将旅程和花费时间存入旅程时间哈希表。
对于 getAverageTime \textit{getAverageTime} getAverageTime 操作,根据进入的地铁站 startStation \textit{startStation} startStation 和离开的地铁站 endStation \textit{endStation} endStation 得到旅程,从旅程时间哈希表中得到该旅程的总时间与次数,总时间除以次数即为该旅程的平均花费时间。
由于所有的事件都按时间顺序出现,同一个乘客一定是先进站后出站,当一个乘客出站之后,不可能在进站之前第二次出站,因此当乘客出站时,不需要将该乘客的进站信息从进站信息哈希表中删除。
代码
class UndergroundSystem {private class CheckInInfo {private String station;private int time;public CheckInInfo(String station, int time) {this.station = station;this.time = time;}public String getStation() {return station;}public int getTime() {return time;}}private Map<Integer, CheckInInfo> checkInMap;private Map<String, int[]> tripTimeMap;public UndergroundSystem() {checkInMap = new HashMap<Integer, CheckInInfo>();tripTimeMap = new HashMap<String, int[]>();}public void checkIn(int id, String stationName, int t) {CheckInInfo info = new CheckInInfo(stationName, t);checkInMap.put(id, info);}public void checkOut(int id, String stationName, int t) {CheckInInfo info = checkInMap.get(id);String startStation = info.getStation();int startTime = info.getTime();String key = startStation + "," + stationName;tripTimeMap.putIfAbsent(key, new int[2]);int[] time = tripTimeMap.get(key);time[0] += t - startTime;time[1]++;}public double getAverageTime(String startStation, String endStation) {String key = startStation + "," + endStation;int[] time = tripTimeMap.get(key);return 1.0 * time[0] / time[1];}
}
复杂度分析
-
时间复杂度:构造方法和各项操作的时间复杂度都是 O ( 1 ) O(1) O(1)。构造方法初始化两个哈希表,各项操作均为操作哈希表和计算花费时间,因此时间复杂度是 O ( 1 ) O(1) O(1)。这里将字符串操作的时间视为 O ( 1 ) O(1) O(1)。
-
空间复杂度: O ( n ) O(n) O(n),其中 n n n 是所有方法的总调用次数。需要使用两个哈希表分别记录进站信息和旅程时间,每个哈希表中的元素个数都是 O ( n ) O(n) O(n)。
相关文章:
哈希表题目:设计地铁系统
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:设计地铁系统 出处:1396. 设计地铁系统 难度 6 级 题目描述 要求 一个地铁系统正在收集乘客在不同站之间的花费时间。他们在使用这些数…...
云时通OMS:为零售品牌商打造高效的全渠道订单管理!
传统的零售企业围绕“人、货、场” 三要素来展开营销,其目标是基于“场”将货销售给更多的人。随着数字技术的应用,新零售模式下的“场”除了传统的线下店铺外,还拓展了多元化的线上渠道,比如小程序、企业APP、第三方平台、电商直…...
有必要给孩子买台灯吗?分享四款高品质的护眼台灯
有必要使用护眼台灯,尤其是有近视现象的孩子们。 现在很多孩子小学就开始近视了,保护视力刻不容缓呀! 很多人不知道,其实劣质光线是最大的眼睛杀手 给孩子随便买便宜的台灯,看着一样能用,其实时间久了 对孩子眼睛的…...
模板方法模式
模板方法模式 模板方法模式定义:使用场景角色定义抽象模板: 为抽象模板,它的方法分为两类AbstractClass1. 基本方法: 也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。2. 模板方法: 可以有一个或几个,一般是一个具体方法…...
基于Yolov5的NEU-DET钢材表面缺陷检测,优化组合新颖程度较高:CVPR2023 DCNV3和InceptionNeXt,涨点明显
1.钢铁缺陷数据集介绍 NEU-DET钢材表面缺陷共有六大类,分别为:crazing,inclusion,patches,pitted_surface,rolled-in_scale,scratches 每个类别分布为: 训练结果如下: 2.基于yolov5s的训练 map值: 2.1 Inception-MetaNeXtStage 对应博客:https://cv2023.blog.csdn.n…...
【HarmonyOS】自定义组件之ArkUI实现通用标题栏组件
【关键字】 标题栏、常用内置组件整合、ArkUI、自定义组件 1、写在前面 在上一篇文章中我们通过Java语言实现了一个通用的标题栏组件,有需要的可以看下,文章地址: 华为开发者论坛 现在很多朋友都已经转战ArkTS语言了,那么今天…...
C#开发的OpenRA游戏的加载地图流程
C#开发的OpenRA游戏的加载地图流程 OpenRA游戏里,地图是一个很关键的数据, 因为地图里包括了地面状态,地面上建筑物状态, 还有玩家在地图上的布局情况,以及各种活动限制的条件。 在OpenRA里,需要把地图目录:OpenRA\mods\cnc\maps 里所有的文件进行加载, 并且保存在缓…...
python ast 详解与用法
目录 基本概念节点类型ast.Assignast.Nameast.Constantast.Callast.Attribute 结点的遍历ast源码示例 结点的修改示例 参考链接 基本概念 在 python 中,我们可以通过自带的 ast 模块来对解析遍历语法树,通过ast.parse()可以将字符串代码解析为抽象语法树…...
Go语言开发小技巧易错点100例(七)
往期回顾: Go语言开发小技巧&易错点100例(一)Go语言开发小技巧&易错点100例(二)Go语言开发小技巧&易错点100例(三)Go语言开发小技巧&易错点100例(四)Go…...
爬虫为什么需要ip
爬虫需要使用爬虫ip主要是为了解决以下问题: 1、反爬虫机制:许多网站会设置反爬虫机制来防止爬虫程序的访问,例如限制IP地址的访问频率、检测访问来源等。使用爬虫ip可以绕过这些限制,使得爬虫程序更难被检测到。 2、访问限制&a…...
RabbitMQ-保证消息可靠性
RabbitMQ-保证消息可靠性 1.消息可靠性1.1.生产者消息确认1.1.1.修改配置1.1.2.定义Return回调1.1.3.定义ConfirmCallback 1.2.消息持久化1.2.1.交换机持久化1.2.2.队列持久化1.2.3.消息持久化 1.3.消费者消息确认1.3.1.演示none模式1.3.2.演示auto模式 1.4.消费失败重试机制1.…...
Python教程——Python本地环境安装
文章目录 简介安装Python下载安装验证安装结果 手动添加环境变量安装问题 简介 python官网:https://www.python.org/ Python Windows下载地址:https://www.python.org/downloads/windows/ Python 官方文档:https://www.python.org/doc/ Pytho…...
“智慧交通”转型升级+创新发展策略
随着“互联网交通”的应用创新推陈出新,传统轨道交通行业客户服务中心已难以满足乘客对便捷高效的客户服务需求;节假日人流量激增,客户服务人手不足,交通、站点堵塞、信息更新不及时等问题是常态。因此,“智慧城市”交…...
华为OD机试 - 开放日活动、取出尽量少的球(Python)
题目描述 某部门开展Family Day开放日活动,其中有个从桶里取球的游戏,游戏规则如下: 有N个容量一样的小桶等距排开, 且每个小桶都默认装了数量不等的小球, 每个小桶装的小球数量记录在数组 bucketBallNums 中, 游戏开始时,要求所有桶的小球总数不能超过SUM, 如果…...
一些关于单链表的操作
思维导图: 一, 链表 1.1节点的结构 链表是啥样的啊?顾名思义链表就是一种用链子链接起来的表。那这种表是怎么样的啊? 这样的呗: 现在,我们知道了链表的形状了。那我们该如何用编程语言来形成这一种形状…...
CTF-PHP反序列化漏洞2-利用魔法函数
作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。我的…...
Doris(23):Doris的函数—字符串函数
1 append_trailing_char_if_absent(VARCHAR str, VARCHAR trailing_char) 如果s字符串非空并且末尾不包含c字符,则将c字符附加到末尾。 trailing_char只包含一个字符,如果包含多个字符,将返回NULL select append_trailing_char_if_absent(a,c);select append_trailing_cha…...
01-Shiro550漏洞流程
1. 漏洞原理 Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。 那么…...
《程序员面试金典(第6版)》面试题 16.08. 整数的英语表示
题目描述 给定一个整数,打印该整数的英文描述。 示例 1: 输入: 123输出: “One Hundred Twenty Three” 示例 2: 输入: 12345输出: “Twelve Thousand Three Hundred Forty Five” 示例 3: 输入: 1234567输出: “One Million Two Hundred Thirty Four Thousand…...
ChatGPT技术原理 第四章:Transformer模型
目录 4.1 什么是Transformer 4.2 Transformer结构详解 4.3 Self-Attention机制 4.4 Multi-Head Attention机制 4.1 什么是Transformer...
基于redis和threadlocal实现登录状态校验和拦截
1.流程图 单机节点下的登录状态校验 分布式节点下的登录状态校验 2.代码实现 实现步骤分为如下几步 实现WebMvcConfigurer接口,添加拦截器定义拦截器,需要配置两个interceptor,第一个用于刷新token,写threadlocalÿ…...
14-6-进程间通信-信号量
前面学习了pipe,fifo,共享内存,信号。 本章将讲述信号量。 一、什么是信号量/信号量集? 1.什么是信号量 信号量是一个计数器。信号量用于实现进程间的同步和互斥。而可以取多个正整数的信号量被称为通用信号量。 对信号量的使用场景的解读 房间&#…...
《中国教育报》投稿邮箱编辑部征稿
《中国教育报》国家教育部主管,中国教育报刊社主办的以教育新闻为主的全国性日报。是迄今为止中国最具权威和最有影响力的教育新闻媒体。中国教育报刊社是中华人民共和国教育部直属的新闻出版机构。2018年获得第三届全国“百强报纸”。2019年入选“新媒体影响力指数…...
Photoshop如何使用绘画和图像修饰之实例演示?
文章目录 0.引言1.给图像添加渐变色效果2.快速创建一副素描画3.清除图像中多余的景物4.快速融合两张图像5.调整图像光影6.人像面部瑕疵修除7.美化眼睛 0.引言 因科研等多场景需要进行绘图处理,笔者对PS进行了学习,本文通过《Photoshop2021入门教程》及其…...
【C++】布隆过滤器
文章目录 布隆过滤器提出布隆过滤器概念布隆过滤器应用场景设计思路:布隆过滤器的插入布隆过滤器的查找布隆过滤器删除BloomFilter.h布隆过滤器优点布隆过滤器缺陷 布隆过滤器提出 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经…...
功能齐全的 ESP32 智能手表,具有多个表盘、心率传感器硬件设计
相关设计资料下载ESP32 智能手表带心率、指南针设计资料(包含Arduino源码+原理图+Gerber+3D文件).zip 介绍 我们调查了智能手表项目的不同方面,并学会了集成和测试每个单独的部分。在本文中,我们将使用所学知识,结合使用硬件和软件组件,从头开始创建我们自己的智能手表。在…...
微服务不是本地部署的最佳选择,不妨试试模块化单体
微服务仅适用于成熟产品 关于从头开始使用微服务,马丁・福勒(Martin Fowler)总结道: 1. 几乎所有成功的微服务都是从一个过于庞大而不得不拆分的单体应用开始的。 2. 几乎所有从头开始以微服务构建的系统,最后都会因…...
解读Toolformer
【引子】读论文Toolformer: Language Models Can Teach Themselves to Use Tools,https://arxiv.org/pdf/2302.04761.pdf,再阅读了几篇关于Toolformer的网络热文,于是“无知者无畏”,开始自不量力地试图解读Toolformer。 大语言模…...
FCOS3D Fully Convolutional One-Stage Monocular 3D Object Detection 论文学习
论文地址:Fully Convolutional One-Stage Monocular 3D Object Detection Github地址:Fully Convolutional One-Stage Monocular 3D Object Detection 1. 解决了什么问题? 单目 3D 目标检测由于成本很低,对于自动驾驶任务非常重…...
Xpath学习笔记
Xpath原理:先将HTML文档转为XML文档,再用xpath查找HTML节点或元素 什么是xml? 1、xml指可扩展标记语言 2、xml是一种标记原因,类似于html 3、xml的设计宗旨是传输数据,而非显示数据 4、xml标签需要我们自己自定义 5、x…...
wordpress主题模板文件/平台外宣推广技巧
要了解管理者心目中优秀员工的标准,就必须了解管理者的工作职责。 管理者的工作职责通常包括:团队管理、资源管理和拿指标。 管理者的职责之一:团队的管理 1、找最出色的人。 比自己优秀,和自己有相同的展望和价值观。 对于这一点…...
网站开发人员的职责/全网营销图片
前言 分析上篇文章的整合的配置文件,我们可以知道配置的bean是成树状结构的,而在树的最顶层是类型为org.mybatis.Spring.SqlSessionFactoryBean的bean,它将其他相关的bean组装在了一起,那么我们的分析就从此类开始。 sqlSessionFa…...
做美食网站的意义/互动营销经典案例
Scrum一直以来争论不断。虽然创始人Ken在演讲中曾说过即使是白痴也可以用Scrum,但是依然有很多人认为Scrum对团队成员的素质要求非常高。另据统计,75%以上的Scrum都可以称得上失败。 去年十月,有幸参加了Outsofting鲍央舟老师的Scrum培训。培…...
网站开发百度云/河南网站seo费用
在1894年顾拜旦开创现代奥林匹克运动百年后的今天,奥运会已成为全人类共同的盛大体育赛事,不断鼓舞着人们超越自我、突破极限。如今,人工智能领域的竞赛也日益兴盛,持续加速着科技进步的步伐。2018年6月5日,由拍拍贷智…...
做网站说什么5.0啥意思/百度浏览器电脑版
出手自Rod Johnson的《J2EE Development without EJB》是一本难得的好书,无论是对于Java程序员,还是.NET程序员。特别是对于.NET程序员,.NET平台的企业级应用还不是很多,.NET平台上的实用性的架构也远远不及J2EE这么成熟ÿ…...
网站如何做二级域名/百度网站提交了多久收录
1、一个plugin中只有一个application 2、rcp4中的application不用自己写类实现,已经包含在application。xmi文件中 3、rcp3创建的项目在rcp4中可以接着开发。 4、perpective添加view不显示 如果在开发中发现,没有打包发布之前,如论运行applic…...