2019-10-09

1、自己最害怕二分查找了。搞不清楚结束条件,low和high的最终位置

 

2、思路

二分查找和顺序查找,但是顺序查找时间和占用内存效果都比二分查找要好

3、比较中间位置的元素和左右两边位置值的大小!

4、代码

 

 1 //一定要记住中间元素肯定是大于等于左边元素,因为是单峰值,整个数组是不是单调递增也不是单调递减
 2 class Solution {
 3 public:
 4     int peakIndexInMountainArray(vector<int>& A) {
 5         /*int i=0;
 6         while(i<A.size()-1){
 7             if(A[i]>A[i+1]) {
 8                 break;
 9             }
10             i++;
11         }
12         return i;*/
13         int low=0;
14         int high=A.size();  
15         int mid=0;
16         while(low<high){
17             mid=(low+high)/2;
18             if(A[mid]>A[mid+1]&&A[mid]>A[mid-1]){
19                 break;
20             }
21             else if(A[mid]>A[mid+1]){
22                 high=mid;//这个是看别人写的,不明白为啥等于mid
23             }
24             else{
25                 low=mid;//这个也不明白,混乱了
26             }
27         }
28         return mid;
29       }
30 };