二分查找问题
来源:互联网 发布:大宋豪侠2java 编辑:程序博客网 时间:2024/05/16 08:58
常见的二分查找问题
1 给定排序数组求一个给定数在数组中的下标,如果不存在就返回应该插入的位置
代码:
int searchInsert(int A[], int n, int target){ if(n==0) return 0; int start=0; int end=n-1; while(start<=end){ int mid=(start+end)>>1; if(target==A[mid]) return mid; else if(A[mid]>target){ end=mid-1; }else{ start=mid+1; } } return start; }
2 给定一个 排序数组,然后经过旋转后,查找给定值是否在数组中。
思路 1 先看左边有序还是右边有序,再利用二分查找
代码
int search(int A[], int n, int target) { if(n==0) return -1; int start=0; int end=n-1; while(start<=end){ int mid=(start+end)>>1; if(A[mid]==target) return mid; else if(A[mid]>=A[start]){ //左边有序 if(A[start]<=target&&target<A[mid]) end=mid-1; else start=mid+1; } else{ //右边有序 if(target<=A[end]&&target>A[mid]) start=mid+1; else end=mid-1; } } return -1; }
3 给定一个排序数组,数组中的数可以重复。找出给定数的 起始和终止位置
代码
vector<int> searchRange(int A[], int n, int target) { int start=0; int end=n-1; vector<int> result(2,-1); if(n==0) return result; while(start<=end){ int mid=(start+end)>>1; if(A[mid]==target){ int index=mid; while(index>=0&&A[index]==target) index--; result[0]=index+1; index=mid; while(index<n&&A[index]==target) index++; result[1]=index-1; break; }else if(A[mid]<target){ start=mid+1; }else{ end=mid-1; } } return result; }
阅读全文
0 0
- 折半,二分查找问题
- 折半,二分查找问题
- 二分查找小问题
- 经典二分查找问题
- 经典二分查找问题
- 经典二分查找问题
- 经典二分查找问题
- 二分查找问题
- 二分查找引出的问题
- 二分查找问题全集OK
- 二分查找问题全集OK
- 二分查找中的精度问题
- Lintcode 经典二分查找问题
- 二分查找,背包问题v3
- Lintcode经典二分查找问题
- 经典二分查找问题-LintCode
- 查找问题整理(1)二分查找
- HDU-2899(简单数学问题+二分查找)
- TCP连接的关闭
- 二维码定位
- zheng ze 开始 ,排除,结尾的模式
- Solr5.x整合IK分词
- 棋盘覆盖
- 二分查找问题
- 第九周项目2-二叉树遍历的递归算法
- 软件测试基础-软件安全性测试
- 数组(十)--二维数组
- Python脚本报错AttributeError: ‘module’ object has no attribute’xxx’解决方法
- jQuery 获取网络时间
- graphql----java使用
- 华为开启log
- Java集合之Vector