二分查找,返回第一次出现的位置
【题目描述】
对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。
给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
【测试样例】
[1,3,5,7,9],5,3
【返回结果】
1
【分析】
3个需要注意的题目问题:
(1)有序数组;
(2)二分查找;
(3)若元素出现多次,要返回第一次出现的位置。
【Solultion】
class BinarySearch {
public:int getPos(vector<int> A, int n, int val) {if (n == 0) return -1;if (n == 1) return 0;int high = n - 1;int low = 0;while (low < high) {int mid = low + (high - low)/2; //防止溢出if (val == A[mid]) {high = mid; //如果找到了val,则继续对low~mid段数据进行二分查找} else if (val > A[mid]) {low = mid + 1;} else {high = mid - 1;}}if (A[high] == val) { //如果存在val,则high对应的值就是第一次出现的位置return high;}return -1;}
};
二分查找,返回第一次出现的位置相关推荐
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式...
序言 本文以经典的二分查找为例,介绍如何使用循环不变式来理解算法并利用循环不变式在原始算法的基础上根据需要产生算法的变体.谨以本文献给在理解算法思路时没有头绪而又不甘心于死记硬背的人. 二分查找究竟有 ...
- 二分查找时间复杂度及其Python实现
二分查找假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查 ...
- 常用的十种算法:二分查找,分治,动态规划,KMP
常用的十种算法 一.二分查找算法(非递归) 1.1 二分查找算法(非递归)介绍 前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方式 二分查找法只适用于从有序的数列中进行 ...
- 二分查找算法(随机, 最左, 最右)
二分查找算法 1. 普通二分查找 2.二分查找最左(第一次出现) 二分查找最左模板题 3.二分查找最右(最后一次出现) 4.二分查找练习题 1.定义 二分查找算法是一种效率较高的查找算法,每次查找能把 ...
- 数据结构与算法:二分查找
二分查找是搜索算法中的一种,用来搜索有序数组 二分查找: 是一种简单算法,其输入是一个有序的元素列表(必须有序的原因稍后解释).如果要 查找的元素包含在列表中,二分查找返回其位置:否则返回null. ...
- 小白的算法初识课堂(part1)--二分查找法
学习笔记 学习书目:<算法图解>- Aditya Bhargava 二分查找法 算法是一组完成任务的指令,任何代码片段都可视为算法.二分查找是一种算法,其输入是一个有序的元素列表(必须有序 ...
- LeetCode 2080. 区间内查询数字的频率(哈希+二分查找)
文章目录 1. 题目 2. 解题 2.1 超时解 2.2 优化 1. 题目 请你设计一个数据结构,它能求出给定子数组内一个给定值的 频率 . 子数组中一个值的 频率 指的是这个子数组中这个值的出现次数 ...
- LeetCode 1712. 将数组分成三个子数组的方案数(前缀和 + 二分查找)
文章目录 1. 题目 2. 解题 221 / 3117,前7.1% 574 / 9692,前 5.9% 周赛前2题如下: LeetCode 5641. 卡车上的最大单元数(排序,模拟) LeetCod ...
- LeetCode 1552. 两球之间的磁力(极小极大化 二分查找)
文章目录 1. 题目 2. 解题 1. 题目 在代号为 C-137 的地球上,Rick 发现如果他将两个球放在他新发明的篮子里,它们之间会形成特殊形式的磁力. Rick 有 n 个空的篮子,第 i 个 ...
最新文章
- joomla网页无任何显示输出
- 深js, jsconf China 回顾
- 一种通用递归深度检测技术 - 基于栈帧内容的检测 - Golang语言描述
- LeetCode 792. 匹配子序列的单词数(二分查找)
- 厉害!这位80后连发2篇Science!身处普通高校,告诉你科研不决取于平台
- Webpack4 学习笔记二 CSS模块转换
- 转	SPI和API的区别
- 区块链供应链金融应用场景解决方案
- [j2me]二级菜单界面演练[三][0215update]
- Slob分配器的数据结构和分配逻辑
- 【强烈建议收藏保存】70多个免费实用工具,数字激活、数据恢复、配置检测......
- 网站域名如何解析到阿里云和腾讯云服务器?
- android手机定时截屏软件,最好用的截图软件 安卓手机截图软件横评对比
- Spring + JedisCluster操作Redis(集群)
- 趣店PHP面经_趣店2018秋招笔试题目
- 原创 | SpringBoot版本竟然引发这种问题,让我吐血三升!
- 《刷新》读书笔记2-看萨提亚治下的微软文化变革
- Bochs 调试指令
- LINUX PID 1和SYSTEMD 专题
- 科技岗位日趋增长,能成为女性职业选择的新可能吗?
热门文章
- Uni-app的Dcloud市场插件总结使用(一)下拉模糊查询
- SKY65723-81低噪声放大器前端模块 GPS / GNSS / BDS预过滤器
- 权限提升之——数据库提权
- K8S篇-安装Syncthing
- 用Imagex.exe 捕获Client机台映像并网络还原 网络还原篇
- A.O.史密斯净水新品闪耀德国IFA展 斩获年度产品创新成果奖
- prefixTreeEspan 频繁子树模式挖掘 A pattern growth 算法实现 mining embedded subtrees.
- 在Word中引用参考文献
- 二十四、红孩儿亲爹的考证
- 嵌入式硬件协议: SPI串行外设接口 Serial Peripheral Interface