• 162. Find Peak Element


    问题描述:

    A peak element is an element that is greater than its neighbors.

    Given an input array nums, where nums[i] ≠ nums[i+1], find a peak element and return its index.

    The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.

    You may imagine that nums[-1] = nums[n] = -∞.

    Example 1:

    Input: nums = [1,2,3,1]
    Output: 2
    Explanation: 3 is a peak element and your function should return the index number 2.

    Example 2:

    Input: nums = [1,2,1,3,5,6,4]
    Output: 1 or 5 
    Explanation: Your function can return either index number 1 where the peak element is 2, 
                 or index number 5 where the peak element is 6.
    

    Note:

    Your solution should be in logarithmic complexity.

    解题思路:

    这道题一开始我想:从头到位遍历一遍比较一下不就找到了吗?直到我看到了要求:在logn的复杂度

    说到logN,首先就会想到二分法。

    那么二分法怎样才能应用到这道题目上呢?

    去中间值没有问题,下一步该怎么做呢?

    可以用中间的值nums[mid]去和右边的相邻的值nums[mid + 1]进行比较:

    若nums[mid] < nums[mid + 1]: 说明在左半部分是一个上升的部分,那么峰值可能会出现

    若nums[mid] > nums[mid+ 1]: 说明在包含mid的右半部分可能会有峰值出现

    代码:

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

     可参考资料:http://courses.csail.mit.edu/6.006/spring11/lectures/lec02.pdf

  • 相关阅读:
    弹跳加载中自定义简单控件实现
    属性动画的监听
    属性动画入门学习
    动画示例
    帧动画代码实现示例
    利用代码定义动画
    利用XMl标签定义动画
    自定义控件的使用方法
    自定义控件之canvas变换和裁剪
    自定义控件之Region区域
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9124170.html
Copyright © 2020-2023  润新知