1. 朴素 直接O(n)扫描一遍,记录最大值索引。  
1 2 3 4 5 6 7 8 9 10 11 12 class  Solution  {public :    int  peakIndexInMountainArray (vector<int >& A)           int  n = A.size ();         int  ans = 0 ;         for  (int  i = 0 ; i < n; i++)             if  (A[i] > A[ans])                 ans = i;                  return  ans;     } }; 
2. 二分 二分根据mid判断是递增一侧还是递减一侧,复杂度O(logn)。  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class  Solution  {public :    int  peakIndexInMountainArray (vector<int >& A)           int  l = 0 , r = A.size () - 1 ;         int  ans = 0 ;         while  (l <= r) {             int  mid = (l + r) / 2 ;             if  (mid == 0 ) {                 ans = A[ans] > A[r] ? ans : r;                 break ;             }             ans = A[ans] > A[mid] ? ans : mid;             if  (A[mid] > A[mid - 1 ] && A[mid] > A[mid + 1 ])                 break ;             else  if  (A[mid] >= A[mid - 1 ])                 l = mid + 1 ;             else  if  (A[mid] <= A[mid - 1 ])                 r = mid - 1 ;         }         return  ans;     } };