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

1. 题目

给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 index 值。

如果不存在这样的下标 index,就请返回 -1。

何为山脉数组?如果数组 A 是一个山脉数组的话,那它满足如下条件:

  • 首先,A.length >= 3

  • 其次,在 0 < i < A.length - 1 条件下,存在 i 使得:
    A[0] < A[1] < … A[i-1] < A[i]
    A[i] > A[i+1] > … > A[A.length - 1]

你将 不能直接访问该山脉数组,必须通过 MountainArray 接口来获取数据:

MountainArray.get(k) - 会返回数组中索引为k 的元素(下标从 0 开始)
MountainArray.length() - 会返回该数组的长度
注意:
对 MountainArray.get 发起超过 100 次调用的提交将被视为错误答案。示例 1:
输入:array = [1,2,3,4,5,3,1], target = 3
输出:2
解释:3 在数组中出现了两次,下标分别为 25,我们返回最小的下标 2。示例 2:
输入:array = [0,1,2,4,2,1], target = 3
输出:-1
解释:3 在数组中没有出现,返回 -1。提示:3 <= mountain_arr.length() <= 100000 <= target <= 10^90 <= mountain_arr.get(index) <= 10^9

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-in-mountain-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 先寻找最高点,mid,mid+1,比较两者大小,左边小,l = mid+1,右边小,r = mid
  • 然后先在左边二分查找,找到了就返回,没有的话,继续查找右侧。
/*** // 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 &mArr) {int n = mArr.length(), l = 0, r = n-1, high;int lval, rval, mid, midval, mid1, midval1;while(l < r){mid = l+((r-l)>>1);midval = mArr.get(mid);midval1 = mArr.get(mid+1);if(midval < midval1)l = mid+1;elser = mid;}high = l;l = 0; r = high;while(l <= r){mid = l+((r-l)>>1);midval = mArr.get(mid);if(midval == target)return mid;else if(midval > target)r = mid-1;elsel = mid+1;}l = high+1, r = n-1;while(l <= r){mid = l+((r-l)>>1);midval = mArr.get(mid);if(midval == target)return mid;else if(midval < target)r = mid-1;elsel = mid+1;}return -1;}
};

4 ms 7.1 MB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不能用蛮力法解决的问题_溆浦事蒙汉:脱贫攻坚绝不能心浮气躁骄傲自满疲倦厌战...

脱贫攻坚绝不能心浮气躁骄傲自满疲倦厌战——蒙汉到卢峰镇检查“四支队伍”集村部工作情况检查南华山村“四支队伍”集村部工作情况与大潭村贫困户舒采米座谈红网溆浦讯(记者 伍交才)8月28日&#xff0c;市人大常委会副主任、县委书记蒙汉到卢峰镇南华山村、大潭村检查“四支队…

Oracle 性能调优 概述

在过去的十年中&#xff0c; Oracle 已经成为世界上最专业的数据库之一。对于 IT 专家来说&#xff0c;就是要确保利用 Oracle 的强大特性来提高他们公司的生产力。最有效的方法之一是通过 Oracle 调优。它有大量的调整参数和技术来改进你的 Oracle 数据库的性能。 Oracle 调优…

LeetCode 801. 使序列递增的最小交换次数(动态规划)

1. 题目 我们有两个长度相等且不为空的整型数组 A 和 B 。 我们可以交换 A[i] 和 B[i] 的元素。注意这两个元素在各自的序列中应该处于相同的位置。 在交换过一些元素之后&#xff0c;数组 A 和 B 都应该是严格递增的&#xff08;数组严格递增的条件仅为A[0] < A[1] <…

mock模拟接口测试 vue_vue+mock.js实现前后端分离

之前都是介绍在普通项目中使用mock.js&#xff0c;那么本次就来介绍一下在vue中使用mock.js实现前后端分离。安装&#xff1a;npm install mockjs这里先写个小案例介绍一下具体使用&#xff0c;写法不规范&#xff0c;仅供参考。然后案例讲完后我们讲具体的规范使用那么一起来看…

进一步的去了解正则[一]

1 正则是什么. 请先看 http://www.phpchina.com/html/11/n-34811.html 几k 的解释后. 原地址已被更改&#xff0c;重新找了一个教程&#xff0c;请点击。 http://deerchao.net/tutorials/regex/regex.htm2 实例剖析.1. $str <FORM NAME"ADFA" ACTION"AS…

LeetCode 123. 买卖股票的最佳时机 III(动态规划)

1. 题目 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意: 你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉之前的股票&#xff09;。 示例 1: 输入: […

mysql异步复制参数_MySQL Replication(异步复制)基本原理

1、复制进程Mysql的复制(replication)是一个异步的复制&#xff0c;从一个Mysqlinstace(称之为Master)复制到另一个Mysqlinstance(称之Slave)。实现整个复制操作主要由三个进程完成的&#xff0c;其中两个进程在Slave(Sql进程和IO进程)&#xff0c;另外一个进程在Master(IO进程…

SQL Server 2005之PIVOT/UNPIVOT行列转换(转)

SQL Server2005引入了很多迎合开发者口味的新特性&#xff0c;虽然改动不大&#xff0c;却大大了减少了开发者的工作量&#xff0c;这种替用户考虑的开发思路&#xff0c;值得称赞。 在SQL Server2000中&#xff0c;要实现行列转换&#xff0c;需要综合利用聚合函数和动态SQL&a…

LeetCode 188. 买卖股票的最佳时机 IV(动态规划)

1. 题目 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。 注意: 你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉之前的股票&#xff09;。 示例 1: 输入: [2…

mysql slow log 分析工具_mysql slow log分析工具的比较

mysql 中的 slow log 是用来记录执行时间较长(超过 long_query_time 秒)的 sql 的一种日志工具。启用 slow log在 my.cnf 中设置[mysqld]slow_query_logonslow_query_log_filemysql-slow重启 MySQL 服务。五款常用工具mysqldumpslowmysqlslamyprofimysql-explain-slow-logmysql…

利用寄存器进入栈值交换

代码 varA, B: Word;beginA :1; B :2; asmmov ax, a //赋值 mov bx, b push ax //进栈 push bx pop ax //退栈 pop bx mov a, ax //利用栈先进后出, ax已退栈, 寄存器里的值为原bx 的值 mov b, bx //利用栈先进后出, bx已退栈, 寄存…

LeetCode 309. 最佳买卖股票时机含冷冻期(动态规划)

1. 题目 给定一个整数数组&#xff0c;其中第 i 个元素代表了第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 你不能同时参与多笔交易&#xff08;你必须在再…

mysql new map_使用构造器模式动态构建Map作为mybatis的查询条件

Map filter mapper.convertValue(this,Map.class);System.out.printf("查询条件:%s\n", JSON.toJSONString(filter));returnfilter;}//https://stackoverflow.com/questions/6796187/java-introspection-object-to-map/57057596#57057596public MaptoFilter2(){Map …

处理Excel,填充空白区域

在企业应用开发中经常是业务人员提供Excel的数据源&#xff0c;而开发人员将Excel数据导入到数据库中&#xff0c;然后在数据库中进行处理。在Excel中为了表示一种层次和所属关系&#xff0c;很多时候会产生很多空白的单元格。比如一个CRM数据&#xff0c;里面有销售团队、销售…

LeetCode 901. 股票价格跨度(单调栈)

1. 题目 编写一个 StockSpanner 类&#xff0c;它收集某些股票的每日报价&#xff0c;并返回该股票当日价格的跨度。 今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数&#xff08;从今天开始往回数&#xff0c;包括今天&#xff09;。 例如&#xff0c…

今天动手熟悉了一下css和php

手又痒了&#xff0c;动了动css和php&#xff0c;复习了已经忘了很久的csshttp://www.the520.cn/files/cssstudy/转载于:https://www.cnblogs.com/x2048/articles/1793996.html

Python核心教程(第二版)读书笔记(三)

第三章Python基础 2010-04-09 换行 一行过长的语句可以使用反斜杠‘\’分解成几行。有两种例外情况一个语句不使用反斜线也可以跨行。 1、在使用闭合操作符时&#xff0c;单一语句可以跨多行。例如&#xff1a;在含有小括号、中括号、花括号时可以多行书写。 2、三引号包括下的…

mysql没有写入权限_MySQL的权限系统

一、MySQL权限系统一)MySQL权限系统介绍权限系统的作用&#xff1a;授予来自某个主机的某个用户可以查询、插入、修改、删除等数据库操作的权限不能明确指定拒绝某个用户的连接权限控制(授权与回收)的执行语句包括create user&#xff0c;grant&#xff0c;revoke授权后的权限都…

LeetCode 1300. 转变数组后最接近目标值的数组和(二分查找)

1. 题目 给你一个整数数组 arr 和一个目标值 target &#xff0c;请你返回一个整数 value &#xff0c; 使得将数组中所有大于 value 的值变成 value 后&#xff0c;数组的和 最接近 target &#xff08;最接近表示两者之差的绝对值最小&#xff09;。 如果有多种使得和最接近…

AJAX 弹出窗消息类

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.IO;using System.Text;using System.Web.UI;namespace WebApplication{ /// <summary> /// 消息类 /// /// /// </summary> public class Me…