思路:最多三次二分法:第一次先用二分法找出峰值,后两次依次对峰值左、右侧二分查找target

这种交互式问题 建议写个参数是数组的对应函数 测试下;

class MountainArray
{public:int get(int index);int length();
};
int findInMountainArray(int target, MountainArray &mountainArr)
{//二分法找峰值int l = 0, len = mountainArr.length(), r = len - 1;int mid = 0;int res = -1;while (l < r){mid = (l + r) / 2;if (mountainArr.get(mid) < mountainArr.get(mid + 1)) //如果小于右边元素得值 肯定峰值在右侧{l = mid + 1;}else{r = mid;//针对案例[1,5,2] 2  做出调整}}int mountainTop = l; //得到峰值对应的索引//划分左右两端 分别二分法l = 0;r = mountainTop;while (l <= r){mid = (l + r) / 2;int now=mountainArr.get(mid);if (now == target){res = mid;break;}else if (now < target){l = mid + 1;}else{r = mid - 1;}}if (res != -1)//如果在左端找到target  r直接eturnreturn res;//左侧没找到就去右侧二分l = mountainTop;r = len - 1;while (l <= r){mid = (l + r) / 2;int now=mountainArr.get(mid);if (now == target){res = mid;break;}else if (now > target){l = mid + 1;}else{r = mid - 1;}}return res;
}

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

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

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

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

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

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

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

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

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

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

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

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

    链接:https://leetcode-cn.com/problems/find-in-mountain-array/ /*** * // This is the MountainArray's AP ...

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

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

  8. 牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案

    牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案 题目描述 给出一个转动过的有序数组,你事先不知道该数组转动了多少 (例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2) ...

  9. 2021年2月8日 Leetcode每日一题:978. 最长湍流子数组

    最长湍流子数组 1.题目描述 当 A 的子数组 A[i], A[i+1], -, A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时, A[k] ...

最新文章

  1. mysql存储的判断if_if在数据库mysql存储中判断
  2. 手把手教你做关键词匹配项目(搜索引擎)---- 第六天
  3. 岁月在变迁,彼此在成长。而我在流浪
  4. 数字营销行业大数据平台云原生升级实战
  5. 互联网晚报 | 2月8日 星期二 | 上海微电子交付中国首台光刻机;广东诞生全国首个万亿工业强区;东芝宣布分拆为两家公司...
  6. 林淮川孙玄:分布式锁选型背后的架构设计思维【附源码】
  7. 显卡用什么软件作压力测试,推荐一个显卡的跑分跟压力测试的软件TimeSpy
  8. 史上最全的点线面距离公式与推导过程(图文介绍)
  9. 你有必要不沾计算机一段时间英语,八年级英语下册unit 1必背词组及句子(新人教版).docx...
  10. CAD出图、标书装订、晒图、工程复印、彩色打印/复印
  11. [200127] Java类初始化与实例初始化 - Thinking in Java学习日志
  12. 一位原码乘法器 一位补码乘法器原理
  13. Verilog HDL 实验题
  14. Date: 7 Dec, Saturday 佳能交流空间
  15. java动态生成pdf文件的方法
  16. [转]如何能成为一名真正电子工程师
  17. OpenGL with QtWidgets:投光物、多光源
  18. Voluptuous库笔记
  19. 0120 - Kindle 导出标注时,如何破除 您已达到本内容的剪贴上限 这一限制?
  20. NUC980 PWM驱动配置与测试

热门文章

  1. shell 判断文件出现次数
  2. Underscore.js-精巧而强大实用功能库
  3. InfluxDb系列:几个关键概念(主要是和关系数据库做对比)
  4. WCDMA是什么意思?CDMA是什么意思?GSM是什么意思
  5. 关于自定义脚本rc.local里开机不启动的问题--以tomcat和perl相关的脚本为例
  6. 用System.Net.Mail发送邮件
  7. 互利网上数字金融典型场景: 网络营销
  8. SSLOJ 1351.矩形反色
  9. 单双号限行,今天是否绿色出行
  10. 查询数据库中所有表名称