LeetCode 面试题 10.10. 数字流的秩

文章目录

  • 一、题目
  • 二、C# 题解

一、题目

  假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说:

  实现 track(int x) 方法,每读入一个数字都会调用该方法;

  实现 getRankOfNumber(int x) 方法,返回小于或等于 x 的值的个数。

注意:本题相对原题稍作改动

示例:

输入:
[“StreamRank”, “getRankOfNumber”, “track”, “getRankOfNumber”]
[[], [1], [0], [0]]
输出:
[null,0,null,1]

提示:

  • x <= 50000
  • trackgetRankOfNumber 方法的调用次数均不超过 2000 次

  点击此处跳转题目。

二、C# 题解

  使用数组存储加入的 x,并计算 x 的秩。为了便于计算秩,需要将数组升序排列。因此,插入和查找时都必须保持升序的顺序,可以使用二分进行操作:

public class StreamRank {private class Data{public int x;    // 值public int rank; // x 的秩}private List<Data> datas; // 存储 Data,以 x 的值升序排列public StreamRank() {datas = new List<Data>();}public void Track(int x) {if (!Find(x, out int i)) {                           // 如果没找到 xint num = i > 0 ? datas[i - 1].rank : 0;         // 获取前一个位置的 rankdatas.Insert(i, new Data { x = x, rank = num }); // 在 i 处插入 x}for (int j = i; j < datas.Count; j++) datas[j].rank++; // 更新大于 x 的数的秩}public int GetRankOfNumber(int x) {if (Find(x, out int i)) return datas[i].rank; // 找到有 x,直接返回 x 的秩return i > 0 ? datas[i - 1].rank : 0;         // 未找到,则返回前一个数的秩}// 在 datas 中二分查找 x,返回是否找到,下标存储在 index 中// 若未找到,则 index 被设置为 x 按升序应插入的位置private bool Find(int x, out int index) {int i = 0, j = datas.Count;while (i < j) {int mid = (i + j) / 2;if (x == datas[mid].x) {index = mid;return true;}if (x > datas[mid].x) i = mid + 1;else j = mid;}index = i;return false;}
}/*** Your StreamRank object will be instantiated and called as such:* StreamRank obj = new StreamRank();* obj.Track(x);* int param_2 = obj.GetRankOfNumber(x);*/
  • 时间:108 ms,击败 100.00% 使用 C# 的用户
  • 内存:50.35 MB,击败 100.00% 使用 C# 的用户

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

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

相关文章

基于深度学习实现一张单图,一个视频,一键换脸,Colab脚本使用方法,在线版本,普通人也可以上传一张图片体验机器学习一键换脸

基于深度学习实现一张单图,一个视频,一键换脸,Colab脚本使用方法,在线版本,普通人也可以上传一张图片体验机器学习一键换脸。 AI领域人才辈出,突然就跳出一个大佬“s0md3v”,开源了一个单图就可以进行视频换脸的项目。 项目主页给了一张换脸动图非常有说服力,真是一图…

aarch64-poky-linux-gcc交叉编译报错缺少头文件.h解决方案

0x00 前言 演示用操作系统&#xff1a;Ubuntu 18.04.6 LTS \n \l aarch64-poky-linux-gcc版本&#xff1a;gcc version 10.2.0 (GCC) 最后更新日期&#xff1a;2023-10-19 0x01 解决方案 aarch64-poky-linux-gcc交叉编译时报错缺少头文件.h可能是因为没有设置--sysroot编译…

JavaScript从入门到精通系列第二十三篇:JavaScript中的数组

前言 1&#xff1a;对象的分类 在JavaScript中&#xff0c;对象可以分为以下几种类型&#xff1a; 内置对象&#xff1a;这些对象是由JavaScript引擎提供的&#xff0c;如Object、Array、String、Date、RegExp等。 宿主对象&#xff1a;这些对象是由宿主环境&#xff08;浏览…

Fiber Golang:Golang中的强大Web框架

揭示Fiber在Go Web开发中的特点和优势 在不断发展的Web开发领域中&#xff0c;选择正确的框架可以极大地影响项目的效率和成功。介绍一下Fiber&#xff0c;这是一款令人印象深刻的Golang&#xff08;Go语言&#xff09;Web框架。以其飞快的性能和强大的特性而闻名&#xff0c;…

【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【动态规划】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

VR虚拟现实技术在法院技能培训中的应用

开展法治宣传教育&#xff0c;是全面贯彻落实科学发展观的重要决策&#xff0c;也是保障和促进经济设备会发展和实施“十一五”规划的内在要求。为了让全民法治文化宣传深入人们群众中&#xff0c;突破性地采用VR虚拟现实、web3d开发和三维仿真技术&#xff0c;开发线上法治文化…

大数据技术学习笔记(二)—— Hadoop运行环境的搭建

目录 1 准备模版虚拟机hadoop1001.1 修改主机名1.2 修改hosts文件1.3 修改IP地址1.3.1 查看网络IP和网关1.3.2 修改IP地址 1.4 关闭防火墙1.5 创建普通用户1.6 创建所需目录1.7 卸载虚拟机自带的open JDK1.8 重启虚拟机 2 克隆虚拟机3 在hadoop101上安装JDK3.1 传输安装包并解压…

<蓝桥杯软件赛>零基础备赛20周--第1周

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列。 每个周末发1个博客&#xff0c;共20周&#xff0c;到明年3月初结束。跟上本博客的节奏&#xff0c;省赛三等奖跑不掉。 每周3…

[QT] 如果你怎么试HTTP下载文件得到的QNetworkReply的readAll()都是空数据(长度为0),请看这里

1&#xff0c;首先你对比看看QT官方给出的例子 Download Data from URL - Qt Wiki 2&#xff0c;再看看是不是要设置重定向&#xff0c;如果要&#xff0c;要设置一下 QNetworkRequest request(imageUrl); request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, …

torch张量的降维与升维

文章目录 一、降维和升维未完待续....一、降维和升维 squeeze和unsqueeze是torch张量常用的降维与升维的一种方式,但这种方式只能增添或减少大小为1的维度,如下: x1 = torch.randn(1, 8, 256, 256) x1 = torch.squeeze(x1,dim=

Linux高性能服务器编程——ch6笔记

第6章 高级I/O函数 6.1 pipe函数 用于创建一个管道&#xff0c;以实现进程间通信。 int pipe(int fd[2]); 读端文件描述符fd[0]和写端文件描述符fd[1]构成管道的两端&#xff0c;默认是阻塞的&#xff0c;fd[0]读出数据&#xff0c;fd[1]写入数据。管道内部传输的数据是字节…

Nvidia显卡基础概念介绍

一、PCIe与SXM 1.1 Nvidia GPU PCIe PCIe(peripheral component interconnect express)是一种高速串行计算机扩展总线标准&#xff0c;是英特尔公司在2001年提出来的&#xff0c;它的出现主要是为了取代AGP接口&#xff0c;优点就是兼容性比较好&#xff0c;数据传输速率高、…

【Java】ListIterator

列表迭代器&#xff1a; ListIterator listIterator()&#xff1a;List 集合特有的迭代器该迭代器继承了 Iterator 迭代器&#xff0c;所以&#xff0c;就可以直接使用 hasNext()和next()方法。特有功能&#xff1a; Object previous()&#xff1a;获取上一个元素boolean hasPr…

【PG】数据库管理

查看现有数据库 SELECT datname FROM pg_database;或者 \l创建数据库 create database name;

Zabbix告警与飞书集成

一、配置媒介 1、下载飞书的Zabbix媒介类型如下&#xff1a; zbx_export_mediatype_feishu.xml 2、Zabbix中导入媒介类型 Zabbix Web中选择管理 > 报警媒介&#xff0c;然后导入该媒介类型。导入规则选择“更新现有的”和“创建新的”。 3、配置飞书媒介类型用户 Zabbi…

从一个webpack loader中学习

chalk&#xff1a;给终端输出加一些自定义的样式 loader-utils&#xff1a;webpack的loader配置中会通过options传入一些用户自定义参数&#xff0c;就可以通过该包提供的getoptions()获取 node-fetch&#xff1a;Node.js的模块&#xff0c;用于从远程服务器获取数据 关于bab…

口袋参谋:如何一键获取竞品数据?这招实用!

​在淘宝天猫上开店&#xff0c;市场竞争日益激烈&#xff0c;想要做好店铺&#xff0c;我们就不得不去分析竞品的数据了。 很多卖家开店后&#xff0c;一上来就直接卡在类目前10&#xff0c;折腾了一两个月才发现自己对标错了对象&#xff0c;最终竹篮打水一场空。 所以&…

uni-app:实现时钟自走(动态时钟效果)

效果 核心代码 使用钩子函数 mounted()&#xff0c;设置定时器&#xff0c;是指每秒都要去执行时间的获取&#xff0c;以至于实现时间自走的效果 mounted() { this.updateTime(); // 初始化时间 setInterval(this.updateTime, 1000); // 每秒更新时间 }, 自定义方法…

2023年赋能更多的人

最近接触到一些新人&#xff0c;是真正的网络新人&#xff0c;慢慢理解了新人的困惑。 对于新人&#xff0c;每天获取的信息五花八门&#xff0c;这是好的也是极其不好的。因为他们不知道如何筛选&#xff0c;到底适不适合自己去做。 我一直在劝大家去做一些内容创造性的事情…

小程序点击更多上拉显示选项

1、写一个两个按钮 2、给两个按钮加动画的样式 3、写方法控制两个按钮的显示 <button class"more-button" bindtap"toggleMoreOptions">更多</button><!-- 按钮列表容器&#xff0c;初始状态设置为隐藏 --> <view class"option…