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

力扣——寻找峰值

题目

162. 寻找峰值 - 力扣(LeetCode)

思路

第一想法就是直接遍历,时间复杂度为O(n),肯定超时了。

然后就想到用二分,但是数组又不一定是有序的。仔细一思考,好像也可以用,关键在于这个峰值的性质。
按照题目当中的条件,数组当中总有一个峰值,传统二分查找依赖数组的全局有序性,而这里利用的是峰值的局部性。

  • 如果 nums[mid] < nums[mid + 1]

    • 峰值一定在右侧:
      • 如果右侧某段存在上升趋势,最终会遇到一个峰值或数组的末尾(nums[n] = -∞)。
      • 右侧包含可能的峰值,因此缩小范围到 [mid + 1, high]
  • 如果 nums[mid] > nums[mid + 1]

    • 峰值可能是 mid 或在左侧:
      • 左侧包含可能的峰值,因此缩小范围到 [low, mid]

代码

public int findPeakElement(int[] nums) {
        int low = 0, high = nums.length-1;
        while(low<high){
            int mid = (low + high)/2;
            if(nums[mid]<nums[mid+1]){
                low = mid+1;
            }else{
                high = mid;
            }
        }
        return low;
    }


http://www.kler.cn/a/410859.html

相关文章:

  • 网络层协议IP
  • 【C#】CancellationTokenSource 为任务或线程提供一种优雅的方式来支持取消操作
  • STM32WB55RG开发(5)----监测STM32WB连接状态
  • ‌Kotlin中的?.和!!主要区别
  • Taro React小程序开发框架 总结
  • 电话机器人的最佳应用
  • 智能合约运行原理
  • 实现可视化大屏的适配,并且解决缩放导致的事件偏移问题
  • 【源码】Sharding-JDBC源码分析之SQL中分片键路由ShardingSQLRouter的原理
  • pytorch torch.Tensor.item() 方法介绍
  • 【VRChat 改模】开发环境搭建:VCC、VRChat SDK、Unity 等环境配置
  • Pytorch使用手册-Datasets DataLoaders(专题三)
  • 李春葆《数据结构》-课后习题代码题
  • Ubuntu20.04+ROS 进行机械臂抓取仿真:环境搭建(一)
  • Amazon商品详情API接口:电商创新与用户体验的驱动力
  • 电子消费品生产线:科技的时尚,玛哈特矫平机为生产线打造平整面板
  • 【SpringBoot】MapStruct生成映射代码
  • 【论文笔记】Number it: Temporal Grounding Videos like Flipping Manga
  • Qt之QMainWidget相关
  • nohup java -jar supporterSys.jar --spring.profiles.active=prod
  • 5.算法移植第六篇YOLOV5 /onnx模型转换成rknn
  • Oracle 深入学习 Part 8: Managing Tablespaces and Data Files(管理表空间和数据文件)
  • Linux中的权限管理
  • 数据结构 ——— 快速排序算法的实现(hoare版本)
  • 贵州茅台[600519]行情数据接口
  • FFmpegFrameRecorder 切分视频文件时结束条件设置不当导致切分后的文件过短问题