当前位置: 首页 > news >正文

lintcode 961 · 设计日志存储系统预【系统设计题 中等】

题目链接,描述

https://www.lintcode.com/problem/961

您将获得多个日志,每个日志都包含唯一的 ID 和时间戳。 时间戳是一个具有以下格式的字符串:Year:Month:Day:Hour:Minute:Second,例如2017:01:01:23:59:59。 所有域都是零填充的十进制数字。设计一个日志存储系统,实现以下功能:void put(int id, string timestamp)给定日志的唯一 ID 和时间戳,将日志存储在存储系统中。int[] retrieve(String start, String end, String granularity)返回时间戳在 start 到 end 范围内的日志 ID。 start 和 end 都具有与时间戳相同的格式。然而,粒度意味着考虑的时间水平。 例如 start="2017:01:01:23:59:59",end="2017:01:02:23:59:59",granularity="Day",这意味着我们需要查找日志范围为 201711 日至 201712 日。最多有 300 次放回操作。年份范围为 [20002017],小时范围为 [0023]。输出不需要你进行排序。样例
样例 1输入:put(1,"2017:01:01:23:59:59")
put(2,"2017:01:01:22:59:59")
put(3,"2016:01:01:00:00:00")
retrieve("2016:01:01:01:01:01","2017:01:01:23:00:00","Year")
retrieve("2016:01:01:01:01:01","2017:01:01:23:00:00","Hour")
输出:[1,2,3]
[1,2]
样例 2输入:put(1,"2017:01:04:19:26:51")
put(2,"2017:01:05:02:15:35")
put(3,"2017:01:07:23:02:54")
retrieve("2017:01:09:08:09:49","2017:01:09:13:55:15","Hour")
输出:[]put(1,"2017:01:04:05:50:33")
put(2,"2017:01:08:22:48:21")
put(3,"2017:01:05:04:44:19")
put(4,"2017:01:05:18:24:57")
put(5,"2017:01:04:03:31:29")
put(6,"2017:01:03:19:26:15")
put(7,"2017:01:02:13:23:19")
put(8,"2017:01:01:02:39:25")
put(9,"2017:01:08:00:02:31")
put(10,"2017:01:04:14:40:57")
retrieve("2017:01:05:15:29:07","2017:01:05:03:03:51","Day")
retrieve("2017:01:07:06:18:53","2017:01:07:14:06:02","Day")
retrieve("2017:01:02:16:46:52","2017:01:07:23:53:28","Month")
retrieve("2017:01:04:21:59:44","2017:01:07:03:03:14","Minute")
输出数据
[3,4]
[]
[1,2,3,4,5,6,7,8,9,10]
[]
期望答案
[3,4]
[]
[1,2,3,4,5,6,7,8,9,10]
[3,4]

思路

本题考查的知识点为设计。

在本题中,我们需要设计日志存储系统,对于该系统的日志信息,我们可以直接使用一个动态数组来进行存储。数组中需要存储的是每个日志的 ID 以及时间戳。

而对于检索指定时间内的日志,则可以通过遍历当前数组来进行。由于该判断时间的范围还加了一个粒度,因此我们需要根据粒度对时间进行裁。其中时间的处理包括起始时间,结束时间以及日志时间。

然后我们再根据对根据粒度处理过后字符串进行时间比较,对此我们可以直接比较两个字符串的字典序即可,这是因为题目中给出的时间戳恰好按照年月日时分秒的格式,因此字典序也能够比较出时间的大小。

最后我们只需要将合法的日志 ID 加到返回的数组即可。

答案

public class LogSystem {List<Log> logs;Map<String,Integer> map;public LogSystem(){logs = new ArrayList<>();map = new HashMap<>();map.put("Year",4);  map.put("Month",7);map.put("Day",10);  map.put("Hour",13);map.put("Minute",16);  map.put("Second",19);}public void put(int id, String timestamp) {logs.add(new Log(id,timestamp));}public int[] retrieve(String start, String end, String granularity) {List<Integer> list= new ArrayList<>();int endIndex = map.get(granularity);start = start.substring(0,endIndex);end= end.substring(0,endIndex);for (Log log : logs) {String logtime = log.timestr.substring(0,endIndex);if(logtime.compareTo(start) >=0 && logtime.compareTo(end)<=0){list.add(log.id);}}int[] ans = new int[list.size()];for (int i = 0; i < list.size(); i++) {ans[i] = list.get(i);}return ans;}static class Log{int id;String timestr;public Log(int i,String s){id = i;timestr=s;}}
}

相关文章:

lintcode 961 · 设计日志存储系统预【系统设计题 中等】

题目链接&#xff0c;描述 https://www.lintcode.com/problem/961 您将获得多个日志&#xff0c;每个日志都包含唯一的 ID 和时间戳。 时间戳是一个具有以下格式的字符串&#xff1a;Year:Month:Day:Hour:Minute:Second&#xff0c;例如2017:01:01:23:59:59。 所有域都是零填…...

windows下Qt、MinGW、libmodbus源码方式的移植与使用

windows下Qt、MinGW、libmodbus源码方式的移植与使用 1、前言 libmodbus官网&#xff1a;https://libmodbus.org/ github下载&#xff1a;https://github.com/stephane/libmodbus 截止2023年8月26日时&#xff0c;libmodbus最新版本为3.1.10&#xff0c;本篇博客基于此版本进…...

leetcode做题笔记104. 二叉树的最大深度

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 思路一&#xff1a;递归 int dfs(struct TreeNode* node){int rdepth 1;int ldepth 1;if(node->left!NULL) ldepth rdepth dfs(node->lef…...

【Luniux】解决Ubuntu外接显示器不显示的问题

Luniux】解决Ubuntu外接显示器不显示的问题 文章目录 Luniux】解决Ubuntu外接显示器不显示的问题1. 检查nvidia显卡驱动是否正常2. 更新驱动3. 检查显示器是否能检测到Reference 1. 检查nvidia显卡驱动是否正常 使用命令行 nvidia-smi来检查显卡驱动是否正常&#xff0c;如果…...

【C++初阶】模拟实现list

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…...

三维模拟推演电子沙盘虚拟数字沙盘开发教程第13课

三维模拟推演电子沙盘虚拟数字沙盘开发教程第13课 该数据库中只提供 成都市火车南站附近的数据请注意&#xff0c;104.0648,30.61658 在SDK中为了方便三方数据的接入&#xff0c;引入了一个用户层接口。主要是完成三方数据的接入&#xff0c;含动态数据&#xff08;如GPS&…...

flask中GET和POST的区别

GET和POST是HTTP协议中两种常用的请求方法&#xff0c;它们在如何向服务器发送数据以及数据传输方式上有所不同。下面是GET和POST的主要区别&#xff1a; 一、数据传输位置&#xff1a; GET&#xff1a;将数据通过URL的查询字符串部分&#xff08;即URL的参数&#xff09;传递…...

基于Spring Boot的游泳馆管理系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的游泳馆管理系统的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java spring…...

git冲突处理(已commit但忘pull的情况)

一般来说&#xff0c;你只要记得先拉再传就不会有问题&#xff0c;但如果pull后没有立刻push&#xff0c;这段时间刚好有人push了&#xff0c;就会导致冲突&#xff0c;那么你可以使用以下方法进行版本回退之后合并代码 步骤&#xff1a; git log查看所有的commit&#xff0c…...

嵌入式设备应用开发(发现需求和提升价值)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 很多做技术的同学,都会陷入到技术的窠臼之中。对于如何做具体的产品、实现具体的技术,他们可能很感兴趣。但是做出来的东西做什么用,或者说是有没有竞争力,事实上他们不是很关心…...

Redis Replication

Redis Replication 1、前言 在单节点搞事情, 存在的问题包括存量问题和增量问题两类, 解决方案就是1个不行上N个, 做到单机维度宕机但服务维度是可用的。 1.1 存量问题 如果目前的单节点QPS满足(也就是综合瓶颈还没达到), 那么只有宕机能影响到。如果业务量不大, 又是出于成…...

软件研发CI/CD流水线图解

当谈到现代软件开发流程时&#xff0c;持续集成&#xff08;Continuous Integration&#xff0c;简称CI&#xff09;和持续交付&#xff08;Continuous Delivery&#xff0c;简称CD&#xff09;是两个关键的实践。它们旨在加速开发流程、提高软件质量&#xff0c;并使软件发布更…...

代码随想录第五十九天

代码随想录第五十九天 Leetcode 503. 下一个更大元素 IILeetcode 42. 接雨水 Leetcode 503. 下一个更大元素 II 题目链接: 下一个更大元素 II 自己的思路:没想到哈哈哈哈&#xff01;&#xff01; 正确思路:这个题在单调栈的情况下转了一个弯&#xff0c;就是需要取一个模操作…...

“yarn“、“npm“、“cnpm“和“pnpm“的区别

"yarn"、"npm"、"cnpm"和"pnpm"的区别 npm优点&#xff1a;缺点&#xff1a; yarn优点&#xff1a;缺点&#xff1a; cnpm优点&#xff1a;缺点&#xff1a; pnpm优点&#xff1a;缺点&#xff1a; 总结&#xff1a; npm npm&#xf…...

批量将txt文件转化为excel文件

可以使用Python的内置库csv和openpyxl来完成这个任务。以下是一个基本的代码示例&#xff1a; import csv from openpyxl import Workbook # 遍历目录中的所有.txt文件 for filename in glob.glob(*.txt): with open(filename, r) as infile: reader csv.reader(…...

StringIndexOutOfBoundsException: String index out of range: 458

报错信息&#xff1a; org.springframework.dao.TransientDataAccessResourceException: ### Error updating database. Cause: java.sql.SQLException: java.lang.StringIndexOutOfBoundsException: String index out of range: 458 ... ... ... 问题原因&#xff1a; <i…...

R语言主成分分析

R语言主成分分析 之前介绍过怎么用SPSS进行主成分分析(PCA)&#xff0c;已经忘了的朋友们可以到主页看看 今天主要介绍下R语言主成分分析的几种方法。都是入门级别&#xff0c;跟着我一步步走&#xff0c;一点都不难哈~ 首先调用R语言自带的数据集&#xff0c;USArrests。这…...

单片机学习-蜂鸣器如何发出声音

硬件电路 软件编写 ①发出声音 #include "reg52.h" typedef unsigned int u16; // 重新定义 类型 typedef unsigned char u8; // 重新定义 类型sbit BEEP P2^5; //定义 P2第五个管教 为BEEP // 延时函数 void delay_time(u16 times) {while(times--); } vo…...

利用敏捷开发工具实现敏捷项目管理的实践经验分享

Scrum中非常强调公开、透明、直接有效的沟通&#xff0c;这也是“可视化的管理工具”在敏捷开发中如此重要的原因之一。通过“可视化的管理工具”让所有人直观的看到需求&#xff0c;故事&#xff0c;任务之间的流转状态&#xff0c;可以使团队成员更加快速适应敏捷开发流程。 …...

代码随想录训练营 贪心02

代码随想录训练营 贪心01 &#x1f338;55. 跳跃游戏&#x1f338;代码 122. 买卖股票的最佳时机 II45. 跳跃游戏 II &#x1f338;55. 跳跃游戏&#x1f338; 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...