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 };