循环数组中找查找某个数值
1、 由于是有序数组,log(n)的时间查找最小值的index
1.1 一定要注意当m、r、l三个位置相同值时,无法区分左右了,所以需要在l到r区间遍历找到最小元素。
2、 看最小值index的左右两侧,是否查找值落在 [l,i] 与 [i,r] 上,在对应区间上进行二分查找
1 #include<iostream> 2 using namespace std; 3 int findminpos(int* a, int l, int r){ 4 int pos = l; 5 int min = a[l]; 6 for(int i=l+1; i<=r; i++){ 7 if( min>a[i] ){ 8 min=a[i]; 9 pos=i; 10 } 11 } 12 return pos; 13 } 14 int findBound(int *a, int r){ 15 if ( r==0 ) return 0; 16 int l = 0; 17 while(l<r){ 18 if( r-l == 1 )break; 19 int m = (l+r)>>1; 20 cout << "search at: " << m << endl; 21 if( a[m] == a[r] && a[l] == a[m] ) return findminpos(a,l,r); 22 if( a[m] > a[r] ) l = m; 23 else r = m; 24 } 25 int p = l; 26 if ( a[l] > a[r] ) p = r; 27 return r; 28 } 29 30 bool find(int *a, int s, int arrlen){ 31 if( !a ) return false; 32 int l = 0; 33 int r = arrlen-1; 34 int m = findBound(a, r); 35 cout << "start pos: " << m << endl; 36 if( s >= a[m] && s <= a[r] ) { 37 l = m; 38 } else { 39 r = m-1; 40 } 41 cout << "searching set [" << l << ","<< r << "]" << endl; 42 while ( l <= r ){ 43 m = (l+r)>>1; 44 if( a[m] == s) return true; 45 if( a[m] > s ) r = m-1; 46 else l = m + 1; 47 } 48 return false; 49 } 50 51 int main(){ 52 int a[] = {1,1,1,1,0,1,1}; 53 if(find(a, 1, 7)) { 54 cout << "find" << endl; 55 } else { 56 cout << "not found" << endl; 57 } 58 }
转载于:https://www.cnblogs.com/25-to-life/p/4496414.html
循环数组中找查找某个数值相关推荐
- html5数组查找第二大数,2021-06-29:在两个都有序的数组中找整体第K小的数。
2021-06-29:在两个都有序的数组中找整体第K小的数. 福大大 答案2021-06-29: 1.A和B长度不等的时候,需要把A和B的长度变成相等. A是短数组,B是长数组. 第k小的数,k从1开 ...
- 在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级
在两个有序的数组中找第N个数,O(lgm+lgn)级 分类: 算法2009-10-09 20:52 981人阅读 评论(3) 收藏 举报 问题描述: Give a divide and conquer ...
- python查找数列中重复数字_在数组中找出重复的数字(异或法)
购买本课程后,可以加51CTO学院李宁老师官方交流群:550369460注意,该群只允许购买李宁老师课程的学员进行技术交流,加群时需要提供在51CTO购买李宁老师课程的订单编号(任何一个课程的订单编号 ...
- (python)给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的两个整数。
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 nu ...
- 从一个数组中找出 N 个数,其和为 M 的所有可能--最 nice 的解法
比起讨论已经存在的大牛,我们更希望有更多有潜力的前端小伙伴成为大牛,只有这样,前端在未来才能够持续不断的发光发热. 故事的背景 这是一个呆萌炫酷吊炸天的前端算法题,曾经乃至现在也是叱咤风云在各个面试场 ...
- 【算法】快速选择算法 ( 数组中找第 K 大元素 )
算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...
- 算法题001 剑指Offer 面试题三:二维数组中的查找
剑指Offer题目1:二维数组中的查找 题目描述: http://ac.jobdu.com/problem.php?cid=1039&pid=0 在一个二维数组中,每一行都按照从左到右递增的顺 ...
- 《剑指Offer》——二维数组中的查找(JZ1)C++
文章目录 前言 题目:JZ1 二维数组中的查找 一.暴力解法 二.优化解法 总结 前言 题目:JZ1 二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序, ...
- 剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题
文章目录 前言 一.二维数组中的查找 题目 题解一 题解二 题解三 二.替换空格 题目 题解一 题解二 题解三 前言 本文主要是写了我做算法题的思路以及对其他优秀题解的自我理解. 一.二维数组中的查找 ...
最新文章
- 使用 alpine 打包镜像注意事项
- linux使用vim浏览python源码
- queued frame 造成图形性能卡顿
- Javascript模板引擎handlebars使用实例及技巧
- 使用Arcgis进行画面(线)并计算大小(长度)。
- horizon服务主要模块_Horizon Workspace 快速部署指南三(配置Workspace数据模块)
- 对比损失的PyTorch实现详解
- 钱准备好!苹果官方账号泄密:iPhone 12明晚发布有戏
- 另一个角度看Java常量池
- python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下
- 图像语义分割(13)-OCNet: 用于场景解析的目标语义网络
- ACM算法笔记(一)模拟算法【详细解析】
- ajax submittype,AjaxSubmit()提交file文件
- 有限元微分方程求解方法,能量原理,瑞利里兹法,伽辽金法(曾攀有限元分析)
- 数据库升级造成的X_$BH状态异常问题
- 最新全国行政区划,省市区县乡镇四级json数据
- tabLayout 设置分割线
- sat数学可以用计算机吗,SAT数学考试带计算机是否可以
- .\Obj\Template.axf: error: L6002U: Could not open file .\obj\core_cm3.o: No such file or directory
- Halcon形态学梯度