0
点赞
收藏
分享

微信扫一扫

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

at小涛 2024-06-20 阅读 21

力扣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;
          }
      };
    
举报

相关推荐

相加等于目标值的两个数

0 条评论