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

Leetcode 162.寻找峰值

峰值元素是指其值严格大于左右相邻值的元素。

给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。

你可以假设 nums[-1] = nums[n] = -∞ 。

你必须实现时间复杂度为 O(log n) 的算法来解决此问题。

示例 1:

输入:nums = [1,2,3,1]
输出:2
解释:3 是峰值元素,你的函数应该返回其索引 2。

示例 2:

输入:nums = [1,2,1,3,5,6,4]
输出:1 或 5 
解释:你的函数可以返回索引 1,其峰值元素为 2;或者返回索引 5, 其峰值元素为 6。

提示:

  • 1 <= nums.length <= 1000
  • -231 <= nums[i] <= 231 - 1
  • 对于所有有效的 i 都有 nums[i] != nums[i + 1]

思路:寻找峰值,最大值就一定是峰值,但这样遍历是行不通的,复杂度就到了O(n),所以每次操作必须寻找减小范围的方法,其核心就是找到规律,该题必有峰值,因为边界是无限小,而且一个节点左右节点都是不相同的,一个节点的峰值情况,无非三种情况,左小右小,那么该值就是峰值,左小右大,那么峰值必在右边因为有上升就必然会下降,最坏情况就是到边界下降到无穷小。所以按此规律,可以直接进行范围缩小。代码如下:和基本二分类似。

class Solution {public int findPeakElement(int[] nums) {// 由于数组边界是无穷小,所以一个元素i,如果i大于两侧,那么他就是峰值// 如果右侧大于i,右侧就必有峰值,左侧同理,这种情况就可以使用二分思想int leftIndex = 0;int rightIndex = nums.length - 1;while (true) {int middleIndex = (leftIndex + rightIndex) / 2;if (compare(nums, middleIndex, middleIndex-1) && compare(nums, middleIndex, middleIndex+1)) {return middleIndex;    } else if (nums[middleIndex+1] > nums[middleIndex]) {leftIndex = middleIndex + 1;} else {rightIndex = middleIndex - 1;}}}// 由于数据中可能会有int的最小值,所以必须写比较函数public boolean compare(int[] nums, int index1, int index2) {if (index1 < 0 || index1 >= nums.length) {return false;}if (index2 < 0 || index2 >= nums.length) {return true;}return getNum(index1, nums) > getNum(index2, nums);}public int getNum(int index, int[] nums) {return nums[index];}
}

相关文章:

Leetcode 162.寻找峰值

峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] nums[n] -∞ 。 你必须实现时间复杂度为 O(…...

c语言:知识补充

c语言中编译开始会对#define&#xff0c;#include等内容做预处理&#xff0c;可以用#define写一些简单函数&#xff0c;方便使用 #include <stdio.h> #include <stdlib.h>#define MAX(A, B) ((A) > (B) ? (A) : (B))int main(){printf("%d\n", MAX(…...

Dapper介绍及特性

一、Dapper介绍及特性 Dapper是一个.NET平台上的轻量级对象关系映射&#xff08;ORM&#xff09;工具&#xff0c;它通过扩展IDbConnection接口&#xff0c;提供了一系列的扩展方法来执行SQL查询并将结果映射到.NET对象中。Dapper以其高性能和简单易用著称&#xff0c;特别适合…...

LeetCode 149. 直线上最多的点数

LeetCode 149. 直线上最多的点数 给你一个数组 points &#xff0c;其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 示例 1&#xff1a; 输入&#xff1a;points [[1,1],[2,2],[3,3]] 输出&#xff1a;3 示例 2&#xff1a; 输入&…...

案例研究丨国控星鲨利用DataEase释放数据潜能,重塑业务视野

国药控股星鲨制药&#xff08;厦门&#xff09;有限公司&#xff08;以下简称为国控星鲨&#xff09;始创于1952年&#xff0c;前身为厦门鱼肝油厂&#xff0c;距今已经有70余年历史&#xff0c;是国家商务部认定的“中华老字号”企业。2011年&#xff0c;国药控股与厦门轻工集…...

网络基础概念和 socket 编程

网络基础概念和 socket 编程 学习目标&#xff1a; 了解 OSI 七层模型、TCP/IP 四层模型结构了解常见的网络协议格式掌握网络字节序和主机字节序之间的转换理解 TCP 服务器端通信流程理解 TCP 客户端通信流程实现 TCP 服务器端和客户端的代码 推荐一个非常好的学习资料仓库 协…...

TypeScript 中的接口、泛型与自定义类型

TypeScript 是一种超集语言&#xff0c;它为 JavaScript 添加了静态类型检查。通过 TypeScript&#xff0c;开发者可以获得更好的工具支持&#xff0c;并且能够编写出更加健壮的代码。本文将探讨 TypeScript 中的几个关键特性&#xff1a;接口、泛型以及如何创建自定义类型。 …...

常州威雅学校:跟随这场音乐盛宴,溯回她的音乐之路

时同学 常州威雅2021届毕业生 英国皇家北方音乐学院 钢琴系 西太湖畔清凉的晚风送来阵阵悦耳的钢琴声&#xff0c;时同学在母校的个人钢琴独奏悄然拉开序幕。这是她自毕业三年后&#xff0c;在常州威雅的首场钢琴独奏会。 随着第一个音符落下&#xff0c;她用手指在黑白键盘…...

【YashanDB知识库】由于hist_head$中analyze time小于tab$中analyze time导致的sql语句执行慢

本文内容来自YashanDB官网&#xff0c;具体内容请见https://www.yashandb.com/newsinfo/7459465.html?templateId1718516 问题现象 某局点yashandb cpu使用率100%&#xff0c;经线上分析是由于几个sql执行慢&#xff0c;其中一个sql为简单的单行等值绑定变量过滤排序。 经分…...

【有啥问啥】深度理解主动学习:机器学习的高效策略

深度理解主动学习&#xff1a;机器学习的高效策略 在大数据时代&#xff0c;数据量的爆炸性增长与有限的标注资源之间的矛盾日益凸显。如何高效地利用标注资源来训练高质量的模型&#xff0c;成为了机器学习领域亟待解决的问题。主动学习&#xff08;Active Learning, AL&…...

智能守护者X100 - 自动化生产线智能机器人安全监控管理系统

1.产品介绍 产品名称: 智能守护者X100 - 自动化生产线智能机器人安全监控管理系统 主要功能: 全方位实时监控:智能守护者X100采用高清摄像头与红外夜视技术,实现对自动化生产线及智能机器人的360无死角监控。系统能自动识别并追踪生产线上的机器人活动轨迹,确保生产安全…...

harmonyos面试题

你在项目中用过线程通信吗&#xff0c;线程是怎么进行通信的? 页面的生命周期有哪些? UAbility的生命周期呢? 你在项目中使用首选项主要用来数什么 组件通信的方式有息些 弹室UI是怎么在页面UI中使用的 常用的修饰符有愿些介绍一下 缓冲区是什么与16进制和数组有什么关…...

神经网络介绍及其在Python中的应用(一)

作者简介&#xff1a;热爱数据分析&#xff0c;学习Python、Stata、SPSS等统计语言的小高同学~ 个人主页&#xff1a;小高要坚强的博客 当前专栏&#xff1a;Python之机器学习 本文内容&#xff1a;神经网络介绍及其在Python中的线性回归应用 作者“三要”格言&#xff1a;要坚…...

数据流处理技术与Flink框架

一数据流 数据流定义&#xff1a; 数据流&#xff08;Data Stream&#xff09;是指数据以连续不断的方式到达和处理的序列。在现实世界中&#xff0c;许多数据来源都是以流的形式存在&#xff0c;比如&#xff1a; 1. 用户行为&#xff1a;用户在网站上的点击流、移动应用中…...

qt中QTatlewidget类常用操作表格的函数有哪些?

在Qt中&#xff0c;QTableWidget 类提供了丰富的函数来操作表格数据。以下是一些常用的操作表格的函数&#xff1a; 1. 初始化与配置 构造函数&#xff1a;QTableWidget(int rows, int columns, QWidget *parent nullptr)&#xff1a;创建一个指定行数和列数的表格控件。设置…...

Linux上的C/C++编程

Linux上的C/C编程 yum软件包管理器Linux编辑器-vimvim命令模式指令集vim末行模式指令集 gcc/g的使用Linux自动化编译工具-make/MakefileLinux调试器-gdb调试命令 多人合作工具git yum软件包管理器 yum 是Linux上常用的包管理器&#xff0c;类似于Windows上的“应用商店”。 语…...

注意 秋季饮酒的正确打开方式

选择合适的白酒1.秋季气候干燥&#xff0c;适合选择一些口感醇厚、温润的白酒。比如酱香型白酒&#xff0c;它具有浓郁的香气和醇厚的口感&#xff0c;能在秋季给你带来温暖的感觉。2.浓香型白酒也是不错的选择&#xff0c;香气扑鼻&#xff0c;口感绵甜&#xff0c;能为秋季增…...

Python如何配置环境变量详解

一、概述 前提&#xff1a;已安装 Python&#xff0c;如下图&#xff1a; 1.1 检查是否已配置成功&#xff08;选&#xff09; 1 2 3 4 5 1. 打开运行窗口 (1) 快捷键 : Win r&#xff0c;并输入 cmd (2) 直接输入: Python 2. 若有下列提示&#xff0c;即为 安装成功…...

Linux驱动开发(速记版)--并发与竞争

第十八章 并发与竞争 18.1 并发与竞争 18.1.1 并发 早期计算机 CPU单核心时&#xff0c;由于 CPU执行速度快于I/O操作&#xff0c;常因等待 I/O而空闲。 为提高 CPU利用率&#xff0c;引入了并发执行理论。并发通过算法在CPU执行I/O等待时切换至其他任务&#xff0c;使多个任…...

AI赋能,数字技术服务平台促进产业协同发展

在当今数字化浪潮席卷全球的时代&#xff0c;数字技术服务平台应运而生&#xff0c;成为推动各行业发展的强大引擎。数字技术服务平台是一个汇聚了众多先进数字技术和资源的综合性服务体系。它就像是一个功能强大的百宝箱&#xff0c;为用户提供了全方位的数字技术支持。 在这…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...