-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoffer_11
37 lines (33 loc) · 900 Bytes
/
offer_11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//面试题11:旋转数组中的最小数字(P86)
int Min(int* numbers,int length)
{
if(numbers==nullptr || length<=0)
throw new std::exception("Invalid parameters");
int index1=0;
int index2=length-1;
int indexMid=index1;
while(numbers[index1]>=numbers[index2]){
if(index2-index1 == 1){
indexMid=index2;
break;
}
indexMid = (index1+index2)/2;
if(numbers[index1] == numbers[index2] && numbers[index1]==numbers[indexMid]){
return MinInorder(numbers,index1,index2);
}
if(numbers[indexMid]>=numbers[index1]){
index1=indexMid;
}else if(numbers[indexMid]<=numbers[index2]){
index2=indexMid;
}
}
return numbers[index2];
}
int MinInorder(int* numbers,int index1,int index2){
int result=numbers[index1];
for(int i=index1-1;i>=0;--i){
if(result>numbers[i])
result=numbers[i];
}
return result;
}