链接:https://leetcode-cn.com/problems/find-in-mountain-array/

/***  * // This is the MountainArray's API interface.*   * // You should not implement it, or speculate about its implementation*    * class MountainArray {*     *   public:*      *     int get(int index);*       *     int length();*        * };*         */class Solution {
public:int findInMountainArray(int target, MountainArray &mountainArr) {int left = 0;int right = mountainArr.length()-1;int top = findMountainTop(mountainArr, left, right);// 判断山顶元素是否为tagetif(mountainArr.get(top) == target) {return top;}// 在山峰左边查找数字int targetIndex= findSortMountain(mountainArr, left, top-1, target);if(targetIndex != -1) {return targetIndex;}// 在山峰右边查找数字targetIndex= findReverseMountain(mountainArr, top+1, right, target);return targetIndex;}// 找到山顶的下标int findMountainTop(MountainArray &mountainArr, int left, int right) {while(left <= right) {int mid = left + (right - left)/2;int midValue = mountainArr.get(mid);int nextValue = mountainArr.get(mid+1);if(nextValue > midValue) {left = mid + 1;} else if (nextValue < midValue) {right = mid;} else {return mid+1;}}return left;}// 标准二分模版:从小到大的数组找一个数字int findSortMountain(MountainArray &mountainArr, int left, int right, int target) {while(left <= right) {int mid = left + (right - left)/2;int midValue = mountainArr.get(mid);if(midValue == target) {return mid;} else if(midValue < target) {left = mid + 1;} else {right = mid - 1;}}return -1;}// 标准二分模版:从大到小的数组找一个数字int findReverseMountain(MountainArray &mountainArr, int left, int right, int target) {while(left <= right) {int mid = left + (right - left)/2;int midValue = mountainArr.get(mid);if(midValue == target) {return mid;} else if(midValue > target) {left = mid + 1;} else {right = mid - 1;}}return -1;}};

1095.山脉数组中查找目标值相关推荐

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

    1095. 山脉数组中查找目标值 (这是一个 交互式问题 ) 给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下 ...

  2. LeetCode【每日一题】 1095. 山脉数组中查找目标值

    题目 1095. 山脉数组中查找目标值 (这是一个 交互式问题 ) 给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 ...

  3. 巧妙利用二分查找:力扣1095. 山脉数组中查找目标值

    1.题目描述: 2.题解: 二分查找 思路: 对于山脉数组,可以看成两部分:前有序数组.后有序数组,分别是升序和降序有序 可以分为三步: 1.找山顶元素mountaintop(也就是最大值)的索引 2 ...

  4. LeetCode 1095. 山脉数组中查找目标值(二分查找)

    1. 题目 给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 index 值. 如果不存在这样的下标 ind ...

  5. 算法---LeetCode 1095. 山脉数组中查找目标值(二分法)

    1. 题目 原题链接 (这是一个 交互式问题 ) 给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 inde ...

  6. 1095. 山脉数组中查找目标值(三分+二分)

    (这是一个 交互式问题 ) 给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 index 值. 如果不存在这 ...

  7. Leetcode每日一题:1095.find-in-mountain-array(山脉数组中查找目标值)

    思路:最多三次二分法:第一次先用二分法找出峰值,后两次依次对峰值左.右侧二分查找target 这种交互式问题 建议写个参数是数组的对应函数 测试下: class MountainArray {publ ...

  8. 16R-在数组中查找目标值

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引. 如果目标值不存在于数组中,返回它将会被按顺序插入的位置.你可以假设数 组中无重复元素. 示例 输入: [1,3,5,6], 5 输出: ...

  9. 34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标

    34. 在排序数组中查找元素的第一个和最后一个位置 难度中等2012 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target.请你找出给定目标值在数组中的开始位置和结束位置. 如果 ...

最新文章

  1. JS字符串的下划线命名和驼峰命名转换
  2. Para list设置
  3. 实时监控Cat之旅~配置Cat集群需要注意的问题
  4. java.lang包怎么用_java.lang.io包的使用
  5. 前端dashboard框架_微前端在网易七鱼的实践
  6. ARM WFI和WFE指令
  7. beautifulsoup4
  8. C++虚继承(二) --- C++ 对象的内存布局(上)(陈皓)
  9. 2011年计算机二级试题,2011年3月全国计算机二级C++考试真题
  10. 程序员实用小程序_我从阅读《实用程序员》中学到了什么
  11. 关于HTTPS的几个问题
  12. 对话阿里巴巴副总裁贾扬清:追求大模型,并不是一件坏事
  13. C++ std::move/std::forward/完美转发
  14. 半监督学习在金融文本分类上的探索和实践
  15. python实现自动开机_python自动循环定时开关机(非重启)测试
  16. linux磁盘介绍及磁盘分区
  17. iso-8859-1表示中文汉字
  18. 我整理了50道经典Java算法题,直接进了字节跳动!!
  19. 电脑php的基本方法是什么,做文员的基本电脑操作是什么
  20. Python用Pillow(PIL)进行简单的图像操作(边缘增强、锐利、平滑等)

热门文章

  1. MYSQL存储过程中事务和DECLARE EXIT/CONTINUE HANDLER的使用
  2. 《万物互联》——1.3 什么样的物体可以接入物联网
  3. Spring mvc 拦截静态资源配置管理
  4. Spring Bean的序列化方案
  5. ExtJS--Combobox多选相关(1)
  6. 一个具有对象计数功能的基类
  7. asp.net 2.0中加密web.config
  8. MySQL事务(脏读、不可重复读、幻读)
  9. 个人项目3:一个能生成小学二年级四则运算题目的“软件”版本3
  10. salesforce 零基础学习(三十四)动态的Custom Label