个人技术分享

力扣1095.山脉数组中查找目标值

  • 先二分出峰顶的下标

    • 然后分为左右两段再做二分
  •   class Solution {
      public:
          int findInMountainArray(int target, MountainArray &mountainArr) {
              int l = 0,r = mountainArr.length()-1;
              while(l<r)
              {
                  int mid = (l + r + 1) / 2;
                  if(mountainArr.get(mid) > mountainArr.get(mid - 1)) l = mid;
                  else r = mid - 1;
              }
              int peak = r;
              if(mountainArr.get(peak) == target) return peak;
              l = 0,r = peak;
              while(l<r)
              {
                  int mid = (l + r) / 2;
                  if(mountainArr.get(mid) >= target) r = mid;
                  else l = mid + 1;
              }
              if(mountainArr.get(l) == target) return l;
      
              l = peak,r = mountainArr.length() - 1;
              while(l<r)
              {
                  int mid = (l + r + 1) / 2;
                  if(mountainArr.get(mid) >= target) l = mid;
                  else r = mid - 1;
              }
              if(mountainArr.get(l) == target) return l;
              return -1;
          }
      };