Search in Rotated Sorted Array(二分查找)
2024-08-25 14:47:57
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
ps:这题和剑指offter的题目类似。一次AC
思路,由于没有重复数字,
1.我们先找出最大值在哪个位置。
2.然后拿target和A[0]做比较,若target>A[0],则在0~max_loc之间来二分查找数组;若target<A[0],则在max_loc+1~n-1来查找数组。
代码:
class Solution {
public:
int binarySearch(int start,int end,int A[],int target){
int l=start;int r=end;int mid=;
while(l<=r){
mid=(l+r)/;
if(A[mid]>target) r=mid-;
else if(A[mid]<target) l=mid+;
else return mid;
}
return -;
}
int findMaxValueLoction(int A[],int n){
if(A[n-]>A[]) return n-;
int l=;int r=n-;int mid=;
while(l<=r){
mid=(l+r)/;
if(mid==) return mid;
else if(mid!=&&A[mid]>A[]&&A[mid]>A[mid-]&&A[mid]<A[mid+]){
l=mid+;
}
else if(mid!=&&A[mid]<A[]&&A[mid]>A[mid-]&&A[mid]<A[mid+]){
r=mid-;
}
else if(mid!=&&A[mid]>A[mid-]&&A[mid]>A[mid+]){
return mid;
}else{
return mid-;
}
}
return -;
}
int search(int A[], int n, int target) {
if(A==NULL||n==) return -;
int max_loc=findMaxValueLoction(A,n);
if(target>A[])
return binarySearch(,max_loc,A,target);
else if(target<A[])
return binarySearch(max_loc+,n-,A,target);
else
return ;
}
};
最新文章
- 两个多项式相加 ( C++ )
- 《bootstrap》实战---小问题,大Bug
- Java初学者入门应该掌握的30个概念
- windows下 mysql忘记密码怎么办
- java 面试每日一题7
- extern ";C"; __declspec(dllexport) __declspec(dllimport) 和 def
- netty4 连通步骤
- 理解HMM
- 【进阶——种类并查集】hdu 1829 A Bug&#39;s Life (基础种类并查集)TUD Programming Contest 2005, Darmstadt, Germany
- 文件上传-html
- windows 编程 —— 子窗口类别化(Window Subclassing)
- Hadoop 2.x(YARN)安装配置LZO
- Java项目开发第二天
- 贝塞尔曲线 &; CAShapeLayer &; Stroke 动画 浅谈
- window.open a.href打开窗口referer的问题
- Answers to ";Why are my jobs not running?";
- mitx一大堆统计学知识
- OpenCV常用数据类型
- SVN的Branch和Tag管理
- Win10系列:C#应用控件基础2