8621 二分查找

news2024/11/18 9:36:18

**思路:**
1. 读取输入的元素个数 `n`。
2. 读取有序数组 `ST`。
3. 读取要查找的关键字 `key`。
4. 使用折半查找法(即二分查找)在数组 `ST` 中查找 `key` 的位置。
5. 如果找到 `key`,输出其位置;如果未找到,输出 "The element is not exist."。

**伪代码:**
1. 读取 `n`。
2. 读取数组 `ST`。
3. 读取 `key`。
4. 初始化 `left` 为 0,`right` 为 `n-1`。
5. 当 `left` 小于等于 `right` 时:
   - 计算 `mid` 为 `(left + right) / 2`。
   - 如果 `ST[mid]` 等于 `key`,输出 `mid` 并返回。
   - 如果 `ST[mid]` 小于 `key`,将 `left` 设为 `mid + 1`。
   - 否则,将 `right` 设为 `mid - 1`。
6. 如果未找到 `key`,输出 "The element is not exist."。

**C++代码:**
 

#include <iostream>
#include <vector>

int Search_Bin(const std::vector<int>& ST, int key) {
    int left = 0;
    int right = ST.size() - 1;
    
    while (left <= right) {
        int mid = left + (right - left) / 2;
        
        if (ST[mid] == key) {
            return mid;
        } else if (ST[mid] < key) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    
    return -1; // key not found
}

int main() {
    int n;
    std::cin >> n;
    
    std::vector<int> ST(n);
    for (int i = 0; i < n; ++i) {
        std::cin >> ST[i];
    }
    
    int key;
    std::cin >> key;
    
    int result = Search_Bin(ST, key);
    if (result != -1) {
        std::cout << "The element position is " << result << "." << std::endl;
    } else {
        std::cout << "The element is not exist." << std::endl;
    }
    
    return 0;
}

**总结:**
- 使用二分查找法可以在有序数组中高效地查找元素的位置。
- 通过计算中间位置 `mid` 并调整查找范围,可以在对数时间复杂度内完成查找。
- 如果找到元素,返回其位置;如果未找到,返回 -1 并输出相应信息。

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

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

相关文章

HarmonyOS/OpenHarmony 离线加载web资源,并实现web资源更新

关键词&#xff1a;h5离线包加载、h5离线包更新、沙箱 在上一篇文章中&#xff0c;我们已经介绍了如何将 rawfile 资源文件中的文件数据拷贝到沙箱下&#xff0c;那么该篇文章将介绍如何加载该沙箱目录下的文件资源&#xff08;此处以打包后的web资源为例&#xff09;&#xf…

5.模拟电子技术笔记——放大电路的分析方法

写在前面 这个是模电的第五次笔记&#xff0c;祝大家学习愉快&#xff01; 笔记部分 1.图解法 我们这节的所有电路都默认是共射放大电路&#xff0c;后面如果没有特殊说明都是共射极的。 1.1 静态工作点的图解分析 我们接下来画出这个电路的直流回路 我们先考察它的输入回…

【redis-04】Redisson实现分布式锁实战和源码剖析

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…

ubuntu切换源方式记录(清华源、中科大源、阿里源)

文章目录 前言一、中科大源二、清华源三、阿里源 前言 记录ubunut切换各个源的方式。 备注&#xff1a;更换源之后使用sudo apt-get update更新索引。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、中科大源 地址&#xff1a;https://mirrors.u…

【Golang】Go语言字符串处理库--strings

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

RK3588主板PCB设计学习(一)

DCDC电路可以直接参考数据手册&#xff1a; 电源输出3A&#xff0c;回流GND也应该是3A&#xff0c;回流路径和输出路径的电流是一致的&#xff0c;不要输出路径布线很粗&#xff0c;GND回流路径很细&#xff0c;并且应该保证回流面积最小&#xff1a; 这一点讲的很到位&#xf…

《深度学习》OpenCV 指纹验证、识别

目录 一、指纹验证 1、什么是指纹验证 2、步骤 1&#xff09;图像采集 2&#xff09;图像预处理 3&#xff09;特征提取 4&#xff09;特征匹配 5&#xff09;相似度比较 6&#xff09;结果输出 二、案例实现 1、完整代码 2、实现结果 调试模式&#xff1a; 三、…

华为云LTS日志上报至观测云最佳实践

华为云LTS简介 华为云云日志服务&#xff08;Log Tank Service&#xff0c;简称 LTS&#xff09;&#xff0c;用于收集来自主机和云服务的日志数据&#xff0c;通过海量日志数据的分析与处理&#xff0c;可以将云服务和应用程序的可用性和性能最大化&#xff0c;为您提供实时、…

音乐项目总结(终)

总的来说写这个项目还是状态差了&#xff0c;前期中期写太慢&#xff0c;后期疯狂赶。 讲点对写这个项目能想起来解决的问题和写的的感触。 前期&#xff1a;当时觉得时间很充足&#xff0c;有布置算法题&#xff0c;我竟然还花三四天去学算法&#xff0c;&#xff0c;动态规划…

【软设】项目管理

【软设】项目管理 (要会根据Gantt和Pert图求关键路径&#xff0c;可以看3.3的示例来了解Pert图) 一.进度管理 进度管理 是项目管理的重要组成部分&#xff0c;旨在确保项目在规定的时间范围内完成。进度管理不仅包括项目活动的规划&#xff0c;还包括监控和控制项目活动的进…

LeetCode 热题 100 回顾8

干货分享&#xff0c;感谢您的阅读&#xff01;原文见&#xff1a;LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 &#xff08;简单&#xff09; 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

Mixture-of-Experts (MoE): 条件计算的诞生与崛起【下篇】

将 Mixture-of-Experts 应用于 Transformers 既然我们已经研究了条件计算的早期工作&#xff0c;那么我们就可以看看 MoE 在变换器架构中的一些应用。 如今&#xff0c;基于 MoE 的 LLM 架构&#xff08;如 Mixtral [13] 或 Grok&#xff09;已广受欢迎&#xff0c;但 MoE 在语…

【C++题目】7.双指针_和为 s 的两个数字

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; LCR 179.查找总价格为目标值的两个商品 题目描述&#xff1a; 解法 解法一&#xff08;暴力解法&#xff0c;会超时&#xff09; 两层 for 循环列出所有两个数字的组合…

网络通信(学习笔记)

InputStreamReader 是 Java 中的一个类&#xff0c;它可以将字节输入流转换为字符输入流。它可以读取字节输入流&#xff0c;并使用指定的字符集将字节解码为字符。 InputStreamReader继承了Reader类 Scanner scanner new Scanner(System.in);//这是一个控制台输入的一个类&am…

巡检机器人室内配电室应用

智能巡检系统实施背景 电力系统发展已进入电气化、自动化、智能化建设加速推进的新阶段&#xff0c;设备规模大幅增长&#xff0c;新设备、新技术加快应用&#xff0c;装备水平取得长足发展&#xff0c;与此同时设备规模大幅增长&#xff0c;新设备、新技术加快应用&#xff0…

JAVA并发编程高级——JDK 新增的原子操作类 LongAdder

LongAdder 简单介绍 前面讲过,AtomicLong通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能已经很好了,但是JDK开发组并不满足于此。使用AtomicLong 时,在高并发下大量线程会同时去竞争更新同一个原子变量,但是由于同时只有一个线程的CAS操作会成功,…

C++ | Leetcode C++题解之第446题等差数列划分II-子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int numberOfArithmeticSlices(vector<int> &nums) {int ans 0;int n nums.size();vector<unordered_map<long long, int>> f(n);for (int i 0; i < n; i) {for (int j 0; j < i;…

蒂森电梯变频器维修CPIK40 CPIK32

维修范围&#xff1a; 1、通力电梯变频器维修&#xff1a;V3F16L,通力V3F18维修,电梯变频器V3F25维修,KDL16,KDL32维修&#xff0c;通力电梯CPU主板维修&#xff0c;806板&#xff0c;电梯安全回路板&#xff0c;LCECCB&#xff0c;LCECEB&#xff0c;电梯显示板维修&#xff…

Python编码系列—Python状态模式:轻松管理对象状态的变化

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

Grafana链接iframe嵌入Web前端一直跳登录页面的问题记录

概述 公司有个项目使用到Grafana作为监控界面,因为项目方的环境极其复杂,仅物理隔离的环境就有三四个,而且每个都得部署项目,今天在某个环境测试,查看界面遇到一个比较奇怪的Grafana问题,后面针对该问题进行跟踪分析并解决,故而博文记录,用于备忘。 问题 登录项目We…