• Leetcode 162 寻找峰值(二分)


    题目描述:

      峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。

    数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。要求时间复杂度为log(N)。

    题解:

      log(N)复杂度的算法一般都是要用到二分的,二分的核心是划分条件函数的设计。在这里,题面给出了假设 nums[-1] = nums[n] = -∞。那么nums[0]有一个递增的趋势,

    nums[N-1]有一个递减的趋势。定义区间的左端点left,右端点right,如果nums[mid] < nums[mid+1],也就是中点有一个递增的趋势,那么在这个mid可以作为新的left(中点为递增,rigth为递减,那么峰值一定会出现在右区间);

    如果nums[mid] > nums[mid+1],中点有一个递减的趋势,那么峰值出现在左区间。

    AC代码:

    class Solution {
    public:
        int findPeakElement(vector<int>& nums) {
            int Len = nums.size();
            int l = 0;
            int r = Len-1;
            while(l<r)
            {
                int mid = (l+r)/2;
                if(nums[mid] < nums[mid+1]) l = mid+1;
                else r = mid;
            }
            return l;
        }
    };

  • 相关阅读:
    Mysql 的安装(压缩文件)和基本管理
    Mysql 数据库安装与配置详解
    Bootstrap的插件
    Bootstrap学习
    移动端单位介绍
    响应式页面-@media介绍
    前端 ---jQuery的补充
    前端 ---- jQuery的ajax
    前端 ----轮播图实现
    安装scrapy时遇到的问题
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12574743.html
Copyright © 2020-2023  润新知