华为OD机试 - 小明找位置 - 二分查找(Python/JS/C/C++ 2024 E卷 100分)

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

小明要出操,按学号从小到大排成一列;小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。

算法复杂度 要求不高于Log(n),学号为整数类型,队列规模<=10000;

二、输入描述

第一行: 输入已排成队列的小朋友的学号 (整数数),以","隔开

例如: 93,95,97,100,102,123,155

第二行: 小明学号,例如 110;

三、输出描述

输出一个数字,代表队列位置(从 1 开始)

例如: 6

四、测试用例

测试用例1:

1、输入

93, 95, 97, 100, 102, 123, 155
110

2、输出

6

3、说明

小明的学号是110,队列按升序排列:

93, 95, 97, 100, 102, 123, 155

根据二分查找,110应该插入的位置是102之后、123之前,因此返回的排队位置是6(从1开始计数)。

测试用例2:

1、输入

1,5,10,15,20,25,30
18

2、输出

5

3、说明

小明的学号是18,队列按升序排列:

1, 5, 10, 15, 20, 25, 30

根据二分查找,18应该插入在15之后、20之前,因此返回的排队位置是5。

五、解题思路

我们可以利用Java的Arrays.binarySearch方法来实现二分查找,如果没有找到精确匹配的位置,binarySearch会返回负数,我们可以根据这个负数值推断出插入点。

  1. 首先,将输入的队列学号进行处理,将字符串转换为整型数组。
  2. 采用二分查找(Binary Search)的方式,找到小明应该插入的位置。
  3. 根据找到的位置输出正确的排队位置(从1开始计数)。

六、Python算法源码

import bisectdef find_position(queue, xiaoMingID):# 使用bisect库进行二分查找index = bisect.bisect_left(queue, xiaoMingID)# 如果找到了小明的学号,返回实际位置 + 1(从1开始的索引)if index < len(queue) and queue[index] == xiaoMingID:return index + 1# 如果没找到,返回应该插入的位置(也是从1开始的索引)return index + 1def main():# 读取输入的学号队列input_queue = input().strip()queue_array = input_queue.split(",")# 转换成整数列表queue = [int(num.strip()) for num in queue_array]# 读取小明的学号xiaoMingID = int(input().strip())# 使用二分查找来找到小明应该插入的位置position = find_position(queue, xiaoMingID)# 输出结果,position已经是从1开始的索引print(position)# 测试程序
if __name__ == "__main__":main()

七、JavaScript算法源码

function findPosition(queue, xiaoMingID) {// 使用二分查找查找小明的插入位置let left = 0;let right = queue.length - 1;// 二分查找算法while (left <= right) {let mid = Math.floor((left + right) / 2);if (queue[mid] === xiaoMingID) {return mid + 1; // 找到了小明的学号,返回从1开始的位置} else if (queue[mid] < xiaoMingID) {left = mid + 1;} else {right = mid - 1;}}// 如果没有找到,left即为小明应插入的位置,返回从1开始的索引return left + 1;
}function main() {// 读取输入的学号队列let inputQueue = prompt("请输入学号队列 (以逗号分隔):");let queueArray = inputQueue.split(",");// 转换成整数数组let queue = queueArray.map(num => parseInt(num.trim()));// 读取小明的学号let xiaoMingID = parseInt(prompt("请输入小明的学号:"));// 使用二分查找查找小明应该插入的位置let position = findPosition(queue, xiaoMingID);// 输出结果,position已经是从1开始的索引console.log(position);
}// 调用主函数
main();

八、C算法源码

#include <stdio.h>int findPosition(int queue[], int size, int xiaoMingID) {int left = 0;int right = size - 1;// 二分查找算法while (left <= right) {int mid = (left + right) / 2;if (queue[mid] == xiaoMingID) {return mid + 1; // 找到了小明的学号,返回从1开始的位置} else if (queue[mid] < xiaoMingID) {left = mid + 1;} else {right = mid - 1;}}// 如果没找到,返回插入位置(从1开始的索引)return left + 1;
}int main() {char inputQueue[100];int queue[100], size = 0, xiaoMingID;// 读取输入的学号队列printf("请输入学号队列 (以逗号分隔): ");fgets(inputQueue, sizeof(inputQueue), stdin);// 将输入的字符串转换成整数数组char *token = strtok(inputQueue, ",");while (token != NULL) {queue[size++] = atoi(token);token = strtok(NULL, ",");}// 读取小明的学号printf("请输入小明的学号: ");scanf("%d", &xiaoMingID);// 使用二分查找来找到小明应该插入的位置int position = findPosition(queue, size, xiaoMingID);// 输出结果,position已经是从1开始的索引printf("%d\n", position);return 0;
}

九、C++算法源码

#include <iostream>
#include <vector>
#include <sstream>
#include <algorithm>using namespace std;// 使用二分查找来找到小明的插入位置
int findPosition(const vector<int>& queue, int xiaoMingID) {int left = 0;int right = queue.size() - 1;// 二分查找算法while (left <= right) {int mid = left + (right - left) / 2;if (queue[mid] == xiaoMingID) {return mid + 1; // 找到了小明的学号,返回从1开始的位置} else if (queue[mid] < xiaoMingID) {left = mid + 1;} else {right = mid - 1;}}// 如果没有找到,left 即为小明应插入的位置,返回从1开始的索引return left + 1;
}int main() {string inputQueue;vector<int> queue;int xiaoMingID;// 读取输入的学号队列cout << "请输入学号队列 (以逗号分隔): ";getline(cin, inputQueue);stringstream ss(inputQueue);string token;// 将输入的字符串转换成整数数组while (getline(ss, token, ',')) {queue.push_back(stoi(token));}// 读取小明的学号cout << "请输入小明的学号: ";cin >> xiaoMingID;// 使用二分查找查找小明应该插入的位置int position = findPosition(queue, xiaoMingID);// 输出结果,position已经是从1开始的索引cout << position << endl;return 0;
}

🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

一句话就把HTTPS工作原理讲明白了

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 上午好&#xff0c;我的网工朋友。 在当今互联网高度发达的时代&#xff0c;信息安全已成为不容忽视的重要议题。 随着越来越多的个人信息和敏感…

朗伯特反射模型

免责声明&#xff1a;本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下&#xff0c;作者不对因使用本文内容而导致的任何直接或间接损失承担责任&#xff0c;包括但不限于数据丢失、业务中断或其他经济…

如何快速入门VCU应用层软件开发?(34篇实例讲解+软件开发测试方法+工具使用)

最近&#xff0c;用一个多月的时间总结了VCU应用层软件开发的基本流程&#xff0c;架构&#xff0c;关键模块的控制策略及Simulink建模方法、测试方法及相关工具的使用。如何快速入门VCU应用软件开发层软件开发&#xff0c;通过本篇文章可以给你答案。文章标题为超链接&#xf…

【MATLAB代码,带TDOA数据导入】TDOA三维空间的位置(1主锚点、3副锚点),多个时间点、输出位置的坐标

作品简介 【MATLAB代码&#xff0c;带TDOA数据导入】TDOA求三维下的位置&#xff0c;通过四个锚节点&#xff08;1主锚点、3副锚点)的信号传播时间差定位。 一次性求解多个时间点的位置&#xff0c;输出位置图像和点的坐标。 产品特点 精准定位&#xff1a;有效消除测距误差…

Centos7 开启Crash dump

Centos7 开启Crash dump 1. 安装依赖2. 修改grub3. kdump自动启动4. 手动测试kdump是否产生5. 确认crash报错内容 1. 安装依赖 yum install -y kexec-tools crash2. 修改grub 在grub中修改GRUB_CMDLINE_LINUX的值,加入crashkernel参数,值为内存/4 即1G内存crashkernel设置为2…

spring boot 2.7整合Elasticsearch Java client + ingest attachment实现文档解析

一、软件环境 软件版本号备注Spring boot2.7.23.x版本建议使用ElasticSearch8.xElasticSearch7.17.4ElasticSearch 7.x 可使用JDK 8 ElasticSearch 8.x 要求使用JDK 11 二、安装ElasticSearch 下载地址&#xff1a;https://artifacts.elastic.co/downloads/elasticsearch/el…

手机星选官,你的智能选机助手

手机星选官&#xff0c;你的智能选机助手 文章目录 手机星选官&#xff0c;你的智能选机助手1. 手机星选官计2. 手机星选官开发流程3. 智能体开发实践3.1 基础配置3.2 进阶配置3.3 高阶功能3.4 调优心得3.5可能会遇到的问题和解决办法 4. 文心智能体 1. 手机星选官计 “手机星…

从蹲在碎片前沉思到SpaceX“筷子回收”,马斯克用20年把梦想照进现实!

2006 年,一片荒芜的沙漠中,火箭残骸散落一地。伊隆马斯克蹲在爆炸后的碎片旁,眼中满是失望和沮丧。这个场景成为了 SpaceX 发展历程中的一个重要转折点。 SpaceX 的故事始于 2002 年,马斯克带着火星移民的梦想创立了这家公司。 早期的 SpaceX 面临着巨大的挑战。连续三次发射失…

岩石分类检测数据集 4700张 岩石检测 带标注 voc yolo 9类

岩石分类检测数据集 4700张 岩石检测 带标注 voc yolo 9类 岩石分类检测数据集 (Rock Classification and Detection Dataset) 描述: 本数据集旨在支持对不同类型的岩石进行自动分类和检测&#xff0c;特别适用于地质勘探、矿物识别、环境监测等领域。通过使用该数据集训练的模…

项目管理中,那些不应该存在的信息差

信息差&#xff0c;简单来说&#xff0c;就是项目团队成员之间、团队与外部利益相关者之间在信息获取、理解和传递上的不一致或偏差。 一、项目管理中常见的信息差类型 1、层级信息差&#xff1a;高层管理者与基层员工之间在信息获取上存在差异&#xff0c;高层可能缺乏一线执…

ubuntu22.04 安装wine9.0 全网首发

wine官网推荐安装方式&#xff1a;https://gitlab.winehq.org/wine/wine/-/wikis/zh_CN/Debian-Ubuntu 博主按照这种方式是失败的&#xff0c;虽然开启了“低调上网”&#xff0c;貌似代理对于终端不起作用&#xff0c;后面会介绍替代方案&#xff0c;一样完美。 一、官网的安…

Spirng事务的传播学习

事务传播&#xff1a;一个事务方法在被调用时&#xff0c;如何与现有事务的交互行为。当方法被事务性地调用时&#xff0c;他应该加入当前事务还是开启一个新事物。 常见的事务传播机制&#xff08;7种&#xff09;&#xff1a; Propagation枚举类&#xff0c;定义了传播机制…

运放基础知识

特点: 1.频带过窄 2.线性范围小 加入负反馈之后 1.拓展频带 2.减小非线性失真 优点: 高增益,输入电阻大,输出电阻小 运放的U,U-都是相对于大地来说的,有些图中可能不画出来,但是需要明白 同时正负电源输入一般也省略 虚短与虚断的理解 当Uo是有限值时,注意到Uo Au*(…

5G NR UE初始接入信令流程

文章目录 5G NR UE初始接入信令流程 5G NR UE初始接入信令流程 用户设备向gNB-DU发送RRCSetupRequest消息。gNB-DU 包含 RRC 消息&#xff0c;如果 UE 被接纳&#xff0c;则在 INITIAL UL RRC MESSAGE TRANSFER 消息中包括为 UE 分配的低层配置&#xff0c;并将其传输到 gNB-CU…

图解Redis 03 | List数据类型的原理及应用场景

介绍 List是一个简单的字符串列表&#xff0c;按照元素的插入顺序进行排序。您可以从头部或尾部添加元素到这个列表中。 列表的最大长度为2^32 - 1&#xff0c;即支持多达40亿个元素。 内部实现 List 类型的底层数据结构在 Redis 中可以采用双向链表或压缩列表(ziplist)&…

vue3之插件

插件plugins是一种能为vue添加全局功能的代码,官网连接&#xff1a;https://cn.vuejs.org/guide/reusability/plugins.html 项目的src文件夹下新建plugins文件夹 新建i18n.js文件 插件是一个拥有install方法的对象 export default {install: (app, options)>{app.config.…

基于SSM+Vue+MySQL的少儿编程网上报名系统

系统展示 用户前台界面 管理员后台界面 系统背景 在当下&#xff0c;随着国家对教育的重视以及教育部门对教育改革的不断推进&#xff0c;少儿编程教育逐渐成为了一个热门领域。传统的少儿编程报名方式往往依赖于线下填写纸质表格或电话报名&#xff0c;这种方式不仅效率低下&a…

开发日志:IIS安全配置

为了解决IIS文件路径泄漏问题&#xff0c;可以采取以下措施&#xff1a; 一. 详细操作 1. CMD关闭NTFS 8.3文件格式的支持 命令行&#xff1a;fsutil 8dot3name set 1 2. 修改注册表禁用短文件名功能 CMD输入regedit回车&#xff0c;在注册表中找到HKEY_LOCAL_MACHINE\SYSTEM\C…

PHP政务招商系统——高效连接共筑发展蓝图

政务招商系统——高效连接&#xff0c;共筑发展蓝图 &#x1f3db;️ 一、政务招商系统&#xff1a;开启智慧招商新篇章 在当今经济全球化的背景下&#xff0c;政务招商成为了推动地方经济发展的重要引擎。而政务招商系统的出现&#xff0c;更是为这一进程注入了新的活力。它…

【Java】I/O 操作详解

&#x1f4c3;个人主页&#xff1a;island1314 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 目录 1. 引言 &#x1f680; 2. File 类 &#x1f4d5; 2.1 创建 File 对象 …