学习记录:js算法(四十一): 基于时间的键值存储
文章目录
- 基于时间的键值存储
- 网上思路
- 总结
基于时间的键值存储
设计一个基于时间的键值数据结构,该结构可以在不同时间戳存储对应同一个键的多个值,并针对特定时间戳检索键对应的值。
实现 TimeMap 类:
- TimeMap() 初始化数据结构对象
- void set(String key, String value, int timestamp) 存储给定时间戳 timestamp 时的键 key 和值 value。
- String get(String key, int timestamp) 返回一个值,该值在之前调用了 set,其中 timestamp_prev <= timestamp 。如果有多个这样的值,它将返回与最大 timestamp_prev 关联的值。如果没有值,则返回空字符串 (“”) 。
示例 1:
输入:
["TimeMap", "set", "get", "get", "set", "get", "get"]
[[], ["foo", "bar", 1], ["foo", 1], ["foo", 3], ["foo", "bar2", 4], ["foo", 4], ["foo", 5]]
输出:
[null, null, "bar", "bar", null, "bar2", "bar2"]解释:
TimeMap timeMap = new TimeMap();
timeMap.set("foo", "bar", 1); // 存储键 "foo" 和值 "bar" ,时间戳 timestamp = 1
timeMap.get("foo", 1); // 返回 "bar"
timeMap.get("foo", 3); // 返回 "bar", 因为在时间戳 3 和时间戳 2 处没有对应 "foo" 的值,所以唯一的值位于时间戳 1 处(即 "bar") 。
timeMap.set("foo", "bar2", 4); // 存储键 "foo" 和值 "bar2" ,时间戳 timestamp = 4
timeMap.get("foo", 4); // 返回 "bar2"
timeMap.get("foo", 5); // 返回 "bar2"
我的思路
直接题目都没看懂。。。
网上思路
也没看懂
网上思路
class TimeMap {constructor() {this.map = {};}set(key, value, timestamp) {if (!this.map[key]) {this.map[key] = [];}this.map[key].push({ timestamp, value });}get(key, timestamp) {if (!this.map[key]) {return "";}const values = this.map[key];let left = 0;let right = values.length - 1;// 使用二分查找找到最大时间戳小于等于给定时间戳的值while (left <= right) {const mid = Math.floor((left + right) / 2);if (values[mid].timestamp <= timestamp) {left = mid + 1; // 继续查找右边} else {right = mid - 1; // 查找左边}}// right 现在是最大时间戳小于等于给定时间戳的索引if (right >= 0) {return values[right].value;} else {return ""; // 没有找到合适的时间戳}}
}
讲解
- 类的构造函数
this.map: 初始化一个空对象 map,用于存储键值对。每个键将映射到一个数组,该数组包含多个时间戳和对应的值。- set 方法
检查键是否存在: 如果 this.map 中没有该 key,就初始化一个空数组。
存储值: 将一个对象 { timestamp, value } 添加到该键对应的数组中。这样,每个键可以存储多个值,且每个值都有一个时间戳。- get 方法
- 检查键是否存在: 如果 this.map 中没有该 key,直接返回空字符串 “”。
- 二分查找:
- 使用 left 和 right 指针来定义当前查找的范围。
- 通过计算 mid 来获取中间的索引,比较 values[mid].timestamp 和给定的 timestamp。
- 如果 values[mid].timestamp 小于或等于 timestamp,则移动 left 指针向右,继续查找更大的时间戳。
- 否则,移动 right 指针向左,查找更小的时间戳。
- 返回值:
当查找结束时,right 指针会指向最大时间戳小于等于给定时间戳的索引,如果 right 大于或等于0,则返回对应的值;否则返回空字符串。
总结
一脸懵。。。开始怀疑自己还能否干这一行了
相关文章:
学习记录:js算法(四十一): 基于时间的键值存储
文章目录 基于时间的键值存储网上思路 总结 基于时间的键值存储 设计一个基于时间的键值数据结构,该结构可以在不同时间戳存储对应同一个键的多个值,并针对特定时间戳检索键对应的值。 实现 TimeMap 类: TimeMap() 初始化数据结构对象void se…...
C语言 | Leetcode C语言题解之第424题替换后的最长重复字符
题目: 题解: int characterReplacement(char* s, int k) {int num[26];memset(num, 0, sizeof(num));int n strlen(s);int maxn 0;int left 0, right 0;while (right < n) {num[s[right] - A];maxn fmax(maxn, num[s[right] - A]);if (right - …...
大数据时代的PDF解析:技术与挑战
在大数据时代,海量信息以不同格式存储,其中 PDF 文件凭借其广泛应用成为了各种业务场景下的主要文档格式。无论是政府文件、企业报告,还是学术论文和技术文档,PDF 都是信息交流的重要媒介。然而,随着信息的爆炸式增长&…...
《nmap 命令全解析:网络探测与安全扫描的利器》
文章目录 一、引言二、nmap 命令概述三、nmap 基本用法(一)安装 nmap(二)简单扫描示例 四、nmap 常见参数(一)-sS(TCP SYN 扫描)(二)-sT(TCP 连接…...
2024年华为OD机试真题-斗地主之顺子-Python-OD统一考试(E卷)
最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精选c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,持续跟新。 题目描述 在斗地主只扑克牌游戏中,…...
亲测有效,长期有效的RTSP流地址公网RTSP地址,各种类型的视频源
我们经常需要做一些实时视频流的测试,但是手边又没有办法及时弄到一个摄像机,我们经常会去搜索一下“公网RTSP地址”,但是大部分现在都失效了,有什么办法能够让我们快速构建一个RTSP流,点几下就能直接用? …...
Excel常用函数大全
Excel常用函数介绍与示例应用 在Excel中,函数是进行数据处理和分析的强大工具。对于新手来说,掌握一些基本的函数使用方法能够大大提升工作效率。以下是一份通俗易懂、适合新手的Excel函数使用方法总结: 1. 求和函数(SUM&#x…...
领夹麦克风哪个品牌好,无线领夹麦克风品牌排名,麦克风品牌大全
无线领夹麦克风因其便携性和隐蔽性,越来越受到演讲者和表演者的青睐。但是,随着市场上品牌和型号的增多,质量也变得参差不齐。许多用户在选购时,会因为缺乏了解而选择到性能不佳的产品,影响声音的清晰度和稳定性。下面…...
【C语言零基础入门篇 - 15】:单链表
文章目录 单链表链表的基本概念单链表功能的实现单链表的初始化单链表新结点的创建单链表头插法单链表的输出单链表的查找单链表修改单链表的删除单链表所有数据结点释放源代码 单链表 链表的基本概念 一、什么是链表? 链表是数据结构中线性表的一种,其…...
Linux主流Web服务器:你选择哪一款?
在Linux环境下,选择Web服务器通常取决于特定需求、资源限制、以及对性能的期望。以下是对几款主流Linux Web服务器的详细分析: 1. Apache HTTP Server - 特点:Apache是功能最全面的Web服务器之一,支持模块化架构,拥…...
光耦知识分享:解读晶体管光耦主要性能指标
晶体管光耦是一种常用的光电耦合器,用于隔离和传输电信号,它包含有光电发射管和接收晶体管两个主要部分。解读晶体管光耦的主要指标有助于了解其性能和应用范围,主要指标包括: 最大工作电压(V_R_MAX)&…...
laravel public 目录获取
在Laravel框架中,public目录是用来存放公共资源的,如CSS、JS、图片等。你可以通过多种方式获取public目录的路径。 方法一:使用helper函数public_path() $path public_path(); 方法二:使用Request类 $path Request::root().…...
强化学习策略买卖股票的效果如何?
Github 项目: GitHub - daocodedao/stable-baselines-stock: 深度强化学习自动炒股 主体参考了 https://github.com/wangshub/RL-Stock,修改了一些 requirements 修改到新版本支持 macstable-baselines 改为 stable-baselines3 使用强化学习预测股价…...
Kotlin 基本介绍(一)
导读大纲 1.1.1 Kotlin 是安全的1.1.2 Kotlin 具有互操作性1.1.3 什么是 idiomatic Kotlin? 1.1.1 Kotlin 是安全的 一般来说,当我们说一种编程语言是安全的 我们指的是它的设计可以防止程序中出现某些类型的错误当然,这并不是绝对的;没有一种语言能防止所有可能出现…...
Cocos Creator发布Moloco平台试玩广告(PlayableAd)
官方文档 主要遇到了两点问题。 1.HTML文件内的body需要注入 <script>window.FBPlayableOnCTAClick () > {(typeof FbPlayableAd undefined) ? alert(FBPlayableAd.onCTAClick) : FbPlayableAd.onCTAClick()}</script> 2.跳转商店使用 window.parent.postM…...
七种修复错误:由于找不到msvcr110.dll 无法继续执行的方法
当你在运行某些程序时遇到“找不到msvcr110.dll”的错误提示,这通常意味着你的系统缺少了Microsoft Visual C 2012 Redistributable包中的一个重要文件。这个DLL文件是Microsoft Visual C Redistributable的一部分,用于支持许多使用Visual C编写的软件和…...
Python模拟鼠标轨迹[Python]
一.鼠标轨迹模拟简介 传统的鼠标轨迹模拟依赖于简单的数学模型,如直线或曲线路径。然而,这种方法难以捕捉到人类操作的复杂性和多样性。AI大模型的出现,能够通过深度学习技术,学习并模拟更自然的鼠标移动行为。 二.鼠标轨迹算法实…...
Ubuntu搭建java开发环境
一:Ubuntu安装 1、下载Ubuntu 24.04.1 LTS 官网下载地址:https://releases.ubuntu.com/24.04.1/ubuntu-24.04.1-desktop-amd64.iso 可以直接点击这里下载 2、使用VMware安装 新建虚拟机 之后一直下一步,到如下界面,选择 刚刚…...
新能源汽车知识点集萃
功能安全-->ISO26262/GB∕T 34590 2021 信息安全--->ISO21434 预期功能安全--->ISO21448 建模规范-->MAAB/JMAAB/MISAR C Codeing Standard; 开发流程--CMMI/IATF16949//ASPICE(Automotive SPICE)/产品规划/概念开发/设计开发/试制试验与…...
c++234继承
#include<iostream> using namespace std;//public 修饰的成员便俩个和方法都能使用 //protected:类的内部 在继承的子类中可使用 class Parents { public:int a;//名字 protected:int b;//密码 private:int c;//情人public:void printT(){cout << &quo…...
Python报错Resource averaged_perceptron_tagger_eng not found
用python标注英文单词词形时,报错: import nltk nltk.download(‘averaged_perceptron_tagger_eng’) Resource averaged_perceptron_tagger_eng not found. 估计是因为网络问题,遂改用离线安装的方式。 第一步:下载averaged_perc…...
Linux运维:Jenkins部署
Jenkins 完整部署流程 一句话总结:Jenkins 是自动化流水线工具,把"代码提交→编译打包→测试→部署上线"全流程自动化,不用人工一步步操作。一、先搞懂核心逻辑 Jenkins 就像一个自动化机器人,你告诉它"代码提交后…...
CSS锚点定位(Anchor Positioning)完全指南:实现精准定位
引言 CSS锚点定位(Anchor Positioning)是CSS定位领域的重大突破,它允许元素相对于其他元素进行定位,而不仅仅是相对于视口或父容器。这为实现复杂的UI组件如弹出菜单、工具提示、下拉选择器等提供了原生支持。 一、锚点定位核心概念 1.1 什么是锚点定位 …...
WebShell-Bypass-Guide字符串处理函数免杀技巧详解
WebShell-Bypass-Guide字符串处理函数免杀技巧详解 【免费下载链接】WebShell-Bypass-Guide 从零学习Webshell免杀手册 项目地址: https://gitcode.com/gh_mirrors/we/WebShell-Bypass-Guide WebShell免杀技术是网络安全领域的重要技能,而字符串处理函数是构…...
Xilinx Zynq MPSoC开发实战:从Vivado到SDK的Hello World全流程解析
1. 项目概述与核心思路作为一名在嵌入式领域摸爬滚打了十多年的老工程师,每次拿到一块新的高性能开发板,那种想立刻点亮它、跑通第一个程序的冲动,就跟当年攒好第一台电脑按下开机键一样。这次拿到手的是基于Xilinx Zynq UltraScale MPSoC的米…...
Perplexity语言学习资源深度测评(2024Q2最新版):92%的学习者不知道的5个隐藏功能与3倍提效配置
更多请点击: https://intelliparadigm.com 第一章:Perplexity语言学习资源概览与核心价值定位 Perplexity 作为一款以“实时、可溯源、推理驱动”为设计哲学的AI问答工具,正迅速成为语言学习者构建语境化知识体系的关键基础设施。它并非传统…...
实习前自我培训-Day3学习
Day3学习–MySQL 企业开发使用方式 使用命令mysql -hip地址 -P端口号 -uroot -p来连接远程的数据库 数据模型关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库特点:使用表存储数据,格式同意,便于…...
Faster-Whisper-GUI:高效本地语音识别与字幕生成终极指南
Faster-Whisper-GUI:高效本地语音识别与字幕生成终极指南 【免费下载链接】faster-whisper-GUI faster_whisper GUI with PySide6 项目地址: https://gitcode.com/gh_mirrors/fa/faster-whisper-GUI 在人工智能语音技术快速发展的今天,本地化语音…...
专业影像场景优选:三大维度拆解分析高速稳定CFexpress存储卡如何保障拍摄顺利
文章概览:从工程视角看CFexpress存储卡选型在专业影像制作中,存储卡不仅仅是数据载体,更是整个工作流中的关键节点。针对高强度8K视频录制、RAW格式连拍、不可重拍场景下数据安全等核心诉求,本文对市场上主流CFexpress存储卡进行工…...
Flyback电源里,为什么TVS管和二极管要‘组队’才能搞定电压尖峰?
Flyback电源中TVS管与二极管的协同钳位机制解析 在反激式(Flyback)电源设计中,初级侧的电压尖峰抑制一直是工程师面临的棘手问题。许多初学者会疑惑:为什么不能像继电器线圈保护那样,仅用单个二极管实现钳位?这个看似简单的疑问背…...
