博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
特殊条件的二分查找
阅读量:5159 次
发布时间:2019-06-13

本文共 801 字,大约阅读时间需要 2 分钟。

Q:一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}

是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。


A:任意将这个数组从中间分开,分成两个数组,则至少有一个数组单调递减,另一个数组则可以由递减数组左移若干位得到,所以我们在二分之后确定界限的时候必须考虑所有情况,即需要查找的数组在哪一个分区里。

首先我们需要判断哪一个分区是单调递减的分区,这可以通过比较arr[l]和arr[mid]来得到,如果是大于等于,则左分区是单调递减,否则是右分区;再通过判断要查找的值是否夹在递减分区中间来最终确定选择哪一个分区。


#include 
using namespace std;int FindData(int* arr,int value,int l,int r){ while(l<=r) { int mid=(l+r)/2; if(arr[mid]==value) return mid; else { if(arr[l]>=arr[mid]) { if(value>arr[mid] && value<=arr[l]) r=mid-1; else l=mid+1; } else { if(value
=arr[r]) l=mid+1; else r=mid-1; } } } return -1;}int main(){ int arr[]={4,3,2,1,6,5}; int n; cin >>n; cout <
<

转载于:https://www.cnblogs.com/daniagger/archive/2012/06/11/2545533.html

你可能感兴趣的文章
BZOJ 1185 最小矩形覆盖
查看>>
2015年创新工场校园招聘软件研发岗位笔试题目——矩阵旋转
查看>>
openstack——nova计算服务
查看>>
匿名对象,内部类和访问修饰符应用
查看>>
Autograd:自动微分
查看>>
Free Type 在win32平台下显示中文
查看>>
POJ 3279 Fliptile (二进制+搜索)
查看>>
poj2385(dp)
查看>>
archlinux硬盘安装
查看>>
总结ISO各层协议都有哪些
查看>>
官网——Nagios快速安装过程详解(只提供参考)
查看>>
BZOJ.4145.[AMPPZ2014]The Prices(状压DP)
查看>>
软件工程 个人阅读作业2
查看>>
Mysql MHA高可用集群架构
查看>>
金明的预算方案
查看>>
美团在Redis上踩过的一些坑-目录(本人非美团)(转)
查看>>
Lintcode: Longest Common Substring
查看>>
Groovy 学习手册(2)
查看>>
AngularJs中directive的延迟加载
查看>>
JGUI源码:响应式布局简单实现(13)
查看>>