Leetcode--162. 寻找峰值
设定区间:从数组的开头到末尾,设定初始区间 low=0,high=nums.length-1。 终止条件:当 low 等于 high 时,返回该索引作为峰值。 计算中间点:计算当前区间的中间点 mid。 比较中间点和右边点:如果 nums[mid] > nums[mid+1],说明当前区间内可能存在峰值,继续查找右边的子区间(low=mid+1)。 继续查找:如果 nums[mid] < nums[mid+1],说明峰值在左边的子区间(high=mid)。
发布日期:2021-04-30 21:04:39
浏览次数:73
分类:精选文章
本文共 1095 字,大约阅读时间需要 3 分钟。
峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],任务是找到峰值元素并返回其索引。数组可能包含多个峰值,此时可以返回任何一个。
方法思路
为了高效地找到峰值元素,可以使用二分查找算法。二分查找的时间复杂度为 O(logN),满足题目要求的时间复杂度。以下是详细的步骤:
这种方法确保在每一步都将搜索范围缩小为之前的一半,从而在 O(logN) 时间内找到峰值。
代码实现
class Solution { public int findPeakElement(int[] nums) { return search(nums, 0, nums.length - 1); } public int search(int[] nums, int low, int high) { if (low == high) { return low; } int mid = (low + high) / 2; if (nums[mid] > nums[mid + 1]) { return search(nums, mid + 1, high); } else { return search(nums, low, mid); } }} 代码解释
- findPeakElement 方法调用递归函数 search,初始调用区间为整个数组。
- search 方法递归地缩小搜索范围:
- 当 low 等于 high 时,返回该索引。
- 计算中间点 mid,比较 nums[mid] 和 nums[mid+1] 的大小:
- 如果 nums[mid] 大于 nums[mid+1],继续搜索右边的子区间。
- 否则,继续搜索左边的子区间。
这种方法高效且简洁,能够在 O(logN) 时间内找到数组中的峰值元素。
发表评论
最新留言
不错!
[***.144.177.141]2026年06月07日 10时24分15秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php局域网上传文件_PHP如何通过CURL上传文件
2023-03-01
PHP工具插件大全
2023-03-01
php布尔值的++
2023-03-01
PHP常量、变量作用域详解(一)
2023-03-01
PHP应用目录结构设计
2023-03-01
PHP应用程序连接MSQL数据库Demo(附crud程序)
2023-03-01
PHP应用程序连接Oracle数据库Demo(附Oracle客户端安装文件)
2023-03-01
PHP开发api接口安全验证
2023-03-01
PHP开发规范PSR
2023-03-01
PHP开发遇到错误0001
2023-03-01
php异常处理
2023-03-01
PHP引入了泛型和集合两大重要特性,大大改善 PHP 代码的可维护性和可读性
2023-03-01
PHP引擎php.ini参数优化
2023-03-01
PHP引用(&)使用详解
2023-03-01
php引用及垃圾回收
2023-03-01
php当前时间的集中写法
2023-03-01
php微信 开发笔记,微信WebApp开发总结笔记
2023-03-01
php微信公众号开发access_token获取
2023-03-01
php微信公众号开发微信认证开发者
2023-03-01