[LeetCode][LCR172]统计目标成绩的出现次数——二分找边界

题目

LCR 172. 统计目标成绩的出现次数

某班级考试成绩按非严格递增顺序记录于整数数组 scores,请返回目标成绩 target 的出现次数。

  • 示例 1:

输入:scores = [2, 2, 3, 4, 4, 4, 5, 6, 6, 8], target = 4
输出:3

  • 示例 2:

输入:scores = [1, 2, 3, 5, 7, 9], target = 6
输出:0

  • 提示:
  • 0 <= scores.length <= 105
  • -109 <= scores[i] <= 109
  • scores 是一个非递减数组
  • -109 <= target <= 109

注意:本题与主站 34 题相同(仅返回值不同):https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/

解法1:哈希表直接统计出现次数

class Solution {
public:int countTarget(vector<int>& scores, int target) {map<int, int> m;for(auto &ele:scores) m[ele]++;return m[target] ? m[target] : 0;}
};

解法2:二分查找边界

  1. 如果使用哈希表进行统计,需要遍历整个数组,时间复杂度是 O(n),且并没有用到数组是非递减序列这个条件
  2. 注意到非递减序列,如果目标值在数组中出现,则一定是连续出现的,那么只需要找到其上下边界即可,上下边界的查找可以使用二分法,此时不需要遍历整个序列,时间复杂度小于 O(n)
  3. 此处的二分查找为常规二分查找的变形,如果目标节点在序列中,返回的是右开的上界;如果目标节点不在序列中,那么则返回目标节点该有的插入位置,所以如果要找 target 左边的边界,则对 target-1 进行寻找即可
  4. 此处的二分查找如何编写,其实就是将常规的二分查找的 nums[middle]==target 合并到 tar>=nums[middle] 这种情况中,随便选一种合并即可

class Solution {
public:int findBound(vector<int>& nums, int tar){int left=0, right=nums.size()-1;while(left<=right){int middle=left+(right-left)/2;if(tar>=nums[middle]) left=middle+1;else right=middle-1;}return left;}int countTarget(vector<int>& scores, int target) {return findBound(scores, target) - findBound(scores, target-1);}
};

解法3:利用 STL 内置的边界查找函数

  1. upper_bound() 寻找有序序列大于 target 的第一个最小的元素
  2. lower_bound() 寻找有序序列第一个等于 target 的元素

class Solution {
public:int countTarget(vector<int>& scores, int target) {return upper_bound(scores.begin(), scores.end(), target) - lower_bound(scores.begin(), scores.end(), target);}
};

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

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

相关文章

Elasticseach基础认识

ES的起源&#xff1f; Elasticsearch 是由 Elastic 公司创建 简称&#xff08;ES&#xff09; Elasticsearch 是一个分布式、免费和开放的搜索和分析引擎&#xff0c;适用于所有类型的数据&#xff0c;包括文本、数字、地理空间、结构化和非结构化数据。 Elasticsearch 基于 …

Oracle 主从切换脚本

一、 切换前预检查 1. dg_precheck_main_v1.4.sh #!/bin/bash#********************************************************************************** # Author: Hehuyi_In # Date: 2022年06月16日 # FileName: dg_precheck_main_v1.4.sh # # For sys user, execute the sc…

LLM之RAG实战(二十九)| 探索RAG PDF解析

对于RAG来说&#xff0c;从文档中提取信息是一种不可避免的场景&#xff0c;确保从源文件中提取出有效的内容对于提高最终输出的质量至关重要。 文件解析过程在RAG中的位置如图1所示&#xff1a; 在实际工作中&#xff0c;非结构化数据比结构化数据丰富得多。如果这些海量数据无…

【向课题组提交实习申请模板】

实习申请 尊敬的老师&#xff1a; 本人系xx学院xx专业的学生xx。现已通过xx公司202x届“xx星”实习计划的面试&#xff0c;并成功获得xx工程师实习岗位&#xff1b;工作内容为xx&#xff1b;实习地点位于xx&#xff1b;实习时长为暑期x个月。我希望能够通过此次实习&#xff0…

Redis事务及原理

Redis 事务以及原理 Redis 中的事务是一组命令的集合&#xff0c;是 Redis 的最小执行单位。它可以保证一次执行多个命令&#xff0c;每个事务是一个单独的隔离操作&#xff0c;事务中的所有命令都会序列化、按顺序地执行。服务端在执行事务的过程中&#xff0c;不会被其他客户…

HTML、CSS、JavaScript

W3C标准&#xff1a;网页主要由三部分组成 ➢结构&#xff1a;HTML ➢表现&#xff1a;CSS ➢行为&#xff1a;JavaScript HTML HTML是一门语言&#xff0c;所有的网页都是用HTML这语言编写出来的 HTML(Hyper Text Markup Language)&#xff1a;超文本标记语言 ➢超文本&#x…

【python】(10)语法糖

Python 语法糖(Syntactic Sugar)是指 Python 中的一些语法特性,它们并不改变语言的功能,但能够使代码更加简洁、易读和优雅。 1. 列表推导式(List Comprehensions) 列表推导式是 Python 中一种简洁的创建列表的方法,它允许我们使用单行代码来生成列表,避免了传统的循…

微服务篇-A JavaEE架构演进历程(学习总结)

原创作者&#xff1a;田超凡 版权所有&#xff0c;转载请注明原作者&#xff0c;严禁复制转载 Level1 传统架构 就是大家众所周知的SSM或SSH了&#xff0c; 优点&#xff1a;三层架构职责清晰 缺点&#xff1a;依赖库管理难度大&#xff0c;协同开发代码冲突和功能扩展性差&a…

如何使用vue定义组件之——子组件调用父组件数据

1.定义父子模板template <div class"container"><my-father></my-father><my-father></my-father><my-father></my-father><!-- 此处无法调用子组件&#xff0c;子组件必须依赖于父组件进行展示 --><!-- <my-…

Java Web实战(五)Web后端之AOP-面向切面编程原理用法详解

文章目录 1. 场景示例Spring AOP快速入门&#xff1a;统计各个业务层方法执行耗时 2. AOP核心概念2.1 通知类型2.2 PointCut2.3 通知顺序2.4 使用通知函数的参数2.5 示例 3. 切入点表达式3.1 切入点表达式-execution3.2 切入点表达式-annotation 4. 案例 AOP&#xff1a;Aspect…

数学实验_Matlab使用2_简单绘图

简单使用 x -pi * 2 : .1 : pi*2;y sin(x);plot(x, y); % 绘制普通图像plot(x, y, k-.*); % 绘制2维图像&#xff0c;线为实线&#xff0c;*为每个点&#xff08;Matlab的画图比较原始&#xff0c;就是简单的秒点画图&#xff09;grid on; % 打开网状格式% grid off; % 关闭…

【自动驾驶中的BEV算法】

自动驾驶中的BEV算法 在自动驾驶领域中&#xff0c;Bird’s Eye View (BEV) 算法是一种将来自不同传感器&#xff08;如摄像头、激光雷达、毫米波雷达等&#xff09;的数据转换为车辆正上方俯瞰视角下的统一表示的方法。这种转换使得车辆能够获得一个直观且具有空间一致性的环…

6. git 指定某一个提交

在 Git 中&#xff0c;直接“更新”一个特定的提交记录是不常见的操作&#xff0c;因为提交记录是 Git 仓库历史的一部分&#xff0c;通常不应该被修改。 但是&#xff0c;你可以通过一些策略来达到类似的效果&#xff0c;比如创建一个新的提交来撤销或者修改之前的提交。 以下…

SORA和大语言模型的区别

OpenAI的文生视频模型SORA与大语言模型&#xff08;LLM&#xff09;的主要区别在于它们的应用领域和处理的数据类型&#xff0c;数据处理能力、技术架构、多模态能力和创新点。SORA作为一款专注于视频生成的模型&#xff0c;展现了在处理视觉数据方面的独特优势和创新能力。 1…

R语言读取大型NetCDF文件

失踪人口回归&#xff0c;本篇来介绍下R语言读取大型NetCDF文件的一些实践。 1 NetCDF数据简介 先给一段Wiki上关于NetCDF的定义。 NetCDF (Network Common Data Form) is a set of software libraries and self-describing, machine-independent data formats that support…

GlobalExceptionHandler全局异常处理器的设计

在Java Web开发中&#xff0c;全局异常处理器&#xff08;GlobalExceptionHandler&#xff09;是一个非常重要的概念。它允许我们集中处理应用程序中可能发生的各种异常&#xff0c;从而提供统一的错误响应&#xff0c;增强用户体验&#xff0c;并简化异常处理逻辑。下面将详细…

栈队列数组试题(二)——队列

一、单项选择题 01.栈和队列的主要区别在于&#xff08;). A.它们的逻辑结构不一样 B.它们的存储结构不一样 C.所包含的元素不一样 D.插入、删除操作的限定不一样 02&#xff0e;队列的“先进先出…

STM32串口通信—串口的接收和发送详解

目录 前言&#xff1a; STM32串口通信基础知识&#xff1a; 1&#xff0c;STM32里的串口通信 2&#xff0c;串口的发送和接收 串口发送&#xff1a; 串口接收&#xff1a; 串口在STM32中的配置&#xff1a; 1. RCC开启USART、串口TX/RX所对应的GPIO口 2. 初始化GPIO口 …

Linux mktemp命令教程:创建临时文件和目录(附实例详解和注意事项)

Linux mktemp命令介绍 mktemp命令在Linux中用于创建临时文件或目录。这个命令可以帮助我们在脚本或应用程序中创建一个有效且唯一的临时文件或目录。 Linux mktemp命令适用的Linux版本 mktemp命令在所有主要的Linux发行版中都可以使用&#xff0c;包括Debian、Ubuntu、Alpin…

鸿蒙跨包跳转页面-HSP页面路由

页面路由跳转 若开发者想在entry模块中&#xff0c;添加一个按钮跳转至library模块中的menu页面&#xff08;路径为&#xff1a;library/src/main/ets/pages/menu.ets&#xff09;&#xff0c;那么可以在使用方的代码&#xff08;entry模块下的Index.ets&#xff0c;路径为&am…