当前位置: 首页 > news >正文

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

目录

  • 题目
  • 解法
  • lambda在这是怎么用的?

题目

(这是一个 交互式问题 )

你可以将一个数组 arr 称为 山脉数组 当且仅当:

arr.length >= 3
存在一些 0 < i < arr.length - 1 的 i 使得:
arr[0] < arr[1] < … < arr[i - 1] < arr[i]
arr[i] > arr[i + 1] > … > arr[arr.length - 1]
给定一个山脉数组 mountainArr ,返回 最小 的 index 使得 mountainArr.get(index) == target。如果不存在这样的 index,返回 -1 。

你无法直接访问山脉数组。你只能使用 MountainArray 接口来访问数组:

MountainArray.get(k) 返回数组中下标为 k 的元素(从 0 开始)。
MountainArray.length() 返回数组的长度。
调用 MountainArray.get 超过 100 次的提交会被判定为错误答案。此外,任何试图绕过在线评测的解决方案都将导致取消资格。

解法

class Solution {int binary_search(MountainArray &mountain, int target, int l, int r, int key(int)) {target = key(target);while (l <= r) {int mid = (l + r) / 2;int cur = key(mountain.get(mid));if (cur == target) {return mid;} else if (cur < target) {l = mid + 1;} else {r = mid - 1;}}return -1;}
public:int findInMountainArray(int target, MountainArray &mountainArr) {int l = 0, r = mountainArr.length() - 1;while (l < r) {int mid = (l + r) / 2;if (mountainArr.get(mid) < mountainArr.get(mid + 1)) {l = mid + 1;} else {r = mid;}}int peak = l;int index = binary_search(mountainArr, target, 0, peak, [](int x) -> int{return x;});if (index != -1) {return index;}return binary_search(mountainArr, target, peak + 1, mountainArr.length() - 1, [](int x) -> int{return -x;});}
};

lambda在这是怎么用的?

int index = binary_search(mountainArr, target, 0, peak, [](int x) -> int{return x;});

[](int x)是输入类型,得到返回类型
0到peak时升序,key(x)=int{return x;},peak+1到length-1降序,key(x)=int{return -x;}这样左右公用一个函数
在降序的时候,比较规则就不一样了,函数也需要重写,用这种方法可以少写一个函数
key 是一个函数指针,它指向一个函数,该函数接受一个整数参数并返回一个整数值。在这个代码片段中,key 函数的作用是对目标值 target 和数组中的元素进行转换,以满足二分查找的要求。

http://www.lryc.cn/news/477422.html

相关文章:

  • 【深度学习】InstantIR:图片高清化修复
  • 推荐一款PowerPoint转Flash工具:iSpring Suite
  • 如何搭建汽车行业AI知识库:定义+好处+方法步骤
  • 创新材料科技:铜冷却壁助力高炉节能降耗
  • Proteus中单片机IO口外接LED输出低电平时,引脚却一直保持高电平的问题(已解决)
  • Obsidian vs Typora
  • 非线性数据结构之图
  • vue3项目history模式部署404处理,使用 historyApiFallback 中间件支持单页面应用路由
  • 不同的科技查新机构之间有什么区别?
  • Pycharm,2024最新专业版下载安装配置详细教程!
  • BERT预训练的MLM和NSP任务的损失函数都是什么?
  • 微信发布测试版4.0,碰瓷NT版QQ?
  • 数据库->视图
  • 华为HarmonyOS打造开放、合规的广告生态 - 贴片广告
  • vue3 v-for循环子组件上绑定ref并且取值
  • GitHub个人主页美化
  • 云短信平台优惠活动
  • Pyecharts使用本地文件绘制美国地图
  • lanqiaoOJ 3255:重新排队 ← STL list 单链表
  • 解决虚拟机启动报:此主机支持AMD-V,但AMD-V处于禁用状态
  • 【安装配置教程】二、VMware安装并配置ubuntu22.04
  • ‌5G SSB(同步信号块)位于物理层‌
  • 40.第二阶段x86游戏实战2-初识lua
  • 官方redis安装
  • OpenEuler 使用ffmpeg x11grab捕获屏幕流,rtsp推流,并用vlc播放
  • 呼叫中心报工号功能有没有价值?有没有更好的方案?
  • Unity 6 基础教程(Unity 界面)
  • Vue插槽的使用场景
  • Redis 下载安装(Windows11)
  • 求平面连接线段组成的所有最小闭合区间