[leetcode933]最近的请求次数

每日偷偷刷题933和队列有关

思路

每来一次ping就记录时间,并返回3000s内ping的次数,本题数据量很大,正向暴力肯定是不行的。

初步思路:反向暴力,不删列表数据。从ping的下标往前推,并统计3000s的数据。

反向暴力,做出来耗时6000多秒

差点超时,根本原因就是后面大数据量时每次都要统计3000次。

class RecentCounter(object):def __init__(self):self.ping_req = list()def ping(self, t):""":type t: int:rtype: int"""count = 0self.ping_req.append(t)ping_lens = len(self.ping_req)for i in range(ping_lens - 1, -1, -1):if (t - self.ping_req[i] <= 3000):count += 1else:breakreturn count

队列入列出列形式

由于3000s前的数据无效,我们可以直接将它删掉。那么每次队列里面所剩下的ping数就是3000s的ping数
用再用内部函数len()统计地址的特性,快速完成长度统计。

class RecentCounter(object):def __init__(self):self.ping_req = list()self.count = 0def ping(self, t):""":type t: int:rtype: int"""self.ping_req.append(t)while(t - self.ping_req[0] > 3000):self.ping_req.pop(0)ping_lens = len(self.ping_req)return ping_lens

使用queue扩展包

class RecentCounter:def __init__(self):self.q = deque()def ping(self, t: int) -> int:self.q.append(t)while self.q[0] < t - 3000:self.q.popleft()return len(self.q)

c++代码学习queue队列类的使用

class RecentCounter {queue<int> ping_req;
public:RecentCounter() {}int ping(int t) {ping_req.push(t);while(t - ping_req.front() > 3000) {ping_req.pop();}return ping_req.size();}
};

C语言要自己实现队列类,比较麻烦,用链表来实现。

队列实现可以参考
https://gitee.com/RodneyLOVE/advanced_course/tree/master/C_block/day_07_queue
完整的样例

C/C++队列原理
为了节约空间,C语言应该采用循环队列较为合适。
暂时就不做了,工作量太大。直接放上参考答案

typedef struct {int *queue;int capability;int head;int tail;
} RecentCounter;RecentCounter* recentCounterCreate() {RecentCounter *obj = (RecentCounter *)malloc(sizeof(RecentCounter));obj->capability = 10001;obj->queue = (int *)malloc(sizeof(int) * obj->capability);obj->head = 0;obj->tail = 0;return obj;
}int recentCounterPing(RecentCounter* obj, int t) {obj->queue[obj->tail++] = t;while (obj->queue[obj->head] < t - 3000) {obj->head++;}return obj->tail - obj->head;
}void recentCounterFree(RecentCounter* obj) {free(obj->queue);free(obj);
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[leetcode]5. 最长回文子串 647. 回文子串

昨日刷题&#xff0c;今日补发 解题思路 中间扩展&#xff0c;遍历数组&#xff0c;以每一项为中心&#xff0c;或以每两项为中心&#xff0c;向外拓展。 学习一下pair概念&#xff0c;还有string的substr的用法 以下是leetcode第五题 C做法 class Solution { public:pair…

牛客网选择题刷题记录之C++

数据结构 顺序表 在一个长度为n的顺序表的任意位置插入一个新元素的渐进时间复杂度为&#xff08;&#xff09; A. O&#xff08;n&#xff09; B. O&#xff08;n/2&#xff09; C. O&#xff08;1&#xff09; D. O&#xff08;n的平方&#xff09; 答案&#xff1a; A 解析…

[剑指offer 24] 反转链表

题目复习反转链表 字节面试的一道面试考题。属于简单题&#xff0c;毕竟复杂的面试也不好判题对吧&#xff08;狗头&#xff09; 思路 思路不难&#xff0c;首先我们观察链表&#xff0c;一般链表指的都是单向链表 struct ListNode {int val;struct ListNode *next; };那么…

[剑指offer 27][LeetCode234] 回文链表

偷偷刷题记录 回文链表 思路 思路1. 处理链表最粗暴的方式就是拷贝到数组中。考试时候也是&#xff0c;只要不会超内存&#xff0c;完全这么办 思路2. 快慢指针。因为我们判断是不是回文链表&#xff0c;回文的特性就是以中为界&#xff0c;两头对称。由于我们不能像使用数组…

牛客网选择题刷题记录之Linux系统

linux运维 linux指令 下面有关linux查看系统负载的命令&#xff0c;说法错误的是&#xff1f; A. uptime命令主要用于获取主机运行时间和查询linux系统负载等信息 B. vmstat命令可以查看查看cpu负载 C. sar -n命令可以查看网络接口信息 D. free命令可以查看磁盘负载情况 答案&…

Keil_uvision_4基本使用教程

前言&#xff1a; keil uvision 5 和 4 使用方式差不多 Keil_uvision_4基本使用教程 Keil C51 V9.00 即09年发布的最新版本uVision 4&#xff0c;版本外观改变比较大 可以使用以前的注册文件如果全新安装&#xff0c;在VISTA或者WIN 7系统下…

MySQL语法看这一篇就够啦

MySQL语法看这一篇就够啦1. MySQL介绍与登录1.1 MySQL介绍1.2 Mariadb安装与启动1.2.1 在centos7环境下安装启动登录数据库操作部分增删改查&#xff1a;增 CREATE DATABASE增删改查&#xff1a;删 DROP增删改查&#xff1a;查找数据库 SHOW DATABASE使用数据库&#xff1a;use…

Python数据库:嵌入式MySQL

Python数据库&#xff1a;嵌入式MySQLPython访问MySQL的库函数PyMySQL安装PyMySQL快速上手以及代码上下文PyMySQL常见语法1. 导包2.连接数据库 connect3. 创建访问对象 cursor4. 下达命令 cursor.execute5. 接收结果 cursor.fetch*6.事务的用法7. 关闭mysql链接 closePython访问…

部门名称部门结构叠用_金属结构分公司三部门联合开展工会小组活动

为丰富职工的业余生活&#xff0c;营造轻松欢乐的氛围&#xff0c;增强部门间交流沟通&#xff0c;舒缓职工工作压力&#xff0c;在金属结构分公司工会的支持下&#xff0c;9月12日&#xff0c;分公司工程管理部、安全监管部和综合办公室联合开展工会小组活动&#xff0c;分公司…

linux环境下安装Java运行Java

Linux环境下安装与运行Java一. Linux环境下安装Java环境——最最最简单粗暴的教程二. Linux下编译Java代码---javac和java命令的使用2.1 编译单个java文件2.2 编译多个Java文件&#xff0c;每个类都在一个包中2.3 不同包编译一. Linux环境下安装Java环境——最最最简单粗暴的教…

不是区块链的特征_上市公司日照港物流区块链平台上线,不是谁都能玩“区块链+物流”?...

免责声明&#xff1a;本文旨在传递更多市场信息&#xff0c;不构成任何投资建议。文章仅代表作者观点&#xff0c;不代表火星财经官方立场。小编&#xff1a;记得关注哦投资区块链&#xff0c;猛戳&#xff1a;火星财经App下载来源&#xff1a;火星一线文 | 成文厚火星财经APP(…

lg手机历史机型_华为后,又一中国芯崛起!国际手机巨头LG都采用它的芯片了...

众所周知&#xff0c;这几年芯片火热&#xff0c;中国芯片厂商们也是受到了大家空前的关注。任何有关于中国芯的利好&#xff0c;都会被放大&#xff0c;被网友们看好。当然&#xff0c;华为是中国这些芯片企业中最强的&#xff0c;5G芯片华为也是目前最领先的&#xff0c;像巴…

Python学习笔记(6): 如何消除字符串前后中间的空白

Python如何消除字符串前后中间的空白 &#xff08;这里不使用正则表达式非常适合小白&#xff09; 相信这是很多人都会遇到的一个小问题。其实要是只想消除前后的空白。我们知道在C/C语言中只需要将字符串数组进行遍历&#xff0c;遇到非字母的值直接剔除即可。那么python要怎…

python转义引号的作用_python传到前端的数据,双引号被转义的问题

python部分def mallTemplateConfig(request):gameRole_edit request.session.get(gameRole_edit, []) #获取json串return render(request, "operationGL/mallTemplateConfig.html",{gameRole_edit: json.dumps(gameRole_edit)})html部分这样写显示正常&#xff0c;没…

Java学习资料汇总

Java语言特点和常见错误1 Java语言特点总结1.1 语言特点1.2 运行机制1.3 JVM虚拟机1.4 JRE运行环境1.5 JDK开发环境Linux下的java安装,编译,运行三大引用类型1 Java语言特点总结 这段内容来自北大唐教授的教案 1.1 语言特点 • 无直接指针操作 • 自动内存管理 • 数据类型长…

任意python版本下载,所有python版本下载的FTP路径

python的官网一般只会给出一些最常用的和最近最新发布的python版本&#xff0c;那么如何去下载任意的python版本呢。 python版本的存储是一个ftp路径&#xff0c;我们输入如下网站&#xff0c;就可以找到所有的python版本。 https://www.python.org/ftp/python

埃斯顿机器人 王杰高_埃斯顿自动化王杰高博士受邀赴韩参加“ROBOT WORLD 2016”等一系列相关活动...

10月12-13日&#xff0c;2016韩国机器人世界展览会(“ROBOT WORLD 2016”)在韩国KINTEX(一山)隆重举行。该展会由韩国机器人产业协会主办&#xff0c;是规模最为盛大的三大国际机器人展会之一。同期&#xff0c;由中国机器人产业联盟(CRIA)与韩国机器人产业协会(KAR)共同主办的…

windows环境下安装多个任意版本的python环境

windows环境下安装多个任意版本的python环境windows环境下安装多个任意版本的python环境下载Python下载pipstep1. 用get-pip下载pipstep2. 分析安装的文件step3. 使用pip得到报错" No module named pip "step4. 原因分析和解决方案其他报错1. ERROR: Could not find …

cdh 简介_CDH 1、CDH简介

1、Apache Hadoop 不足之处• 版本管理混乱• 部署过程繁琐、升级过程复杂• 兼容性差• 安全性低2、Hadoop 发行版• Apache Hadoop• Cloudera’s Distribution Including Apache Hadoop(CDH)• Hortonworks Data Platform (HDP)• MapR• EMR• …3、CDH能解决哪些问题• 10…

Windows环境下用python嵌入式环境跑程序可太方便了

Windows环境下用python嵌入式环境跑程序可太方便了1. 嵌入式包默认的文件夹设置2. 建立python环境文件夹3. 添加python索引包路径4. 安装pip和requirements5. 运行环境6. 完整的powershell install.bat 脚本之前觉得windows电脑安装的python环境太乱太不纯净&#xff0c;或者临…