zoukankan      html  css  js  c++  java
  • lintcode 75 Find Peak Element

     Hi 大家,这道题是lintcode上的find peak element的题,不是leecode的那道,

    这两道题是有区别的,这道题的题目中说明了:只有左右两侧的数都小于某个元素,这种才是峰值,

    而leetcode的题,是只要找到个最大值就行,可以是[1,2]这种。


    There is an integer array which has the following features:

    • The numbers in adjacent positions are different.
    • A[0] < A[1] && A[A.length - 2] > A[A.length - 1].

    We define a position P is a peek if:

    A[P] > A[P-1] && A[P] > A[P+1]
    

    Find a peak element in this array. Return the index of the peak.

    Example

    Given [1, 2, 1, 3, 4, 5, 7, 6]

    Return index 1 (which is number 2) or 6 (which is number 7)

     

     

    分析:

    你给出一个整数数组(size为n),其具有以下特点:

    • 相邻位置的数字是不同的
    • A[0] < A[1] 并且 A[n - 2] > A[n - 1]

    假定P是峰值的位置则满足A[P] > A[P-1]A[P] > A[P+1],返回数组中任意一个峰值的位置。

    给出数组[1, 2, 1, 3, 4, 5, 7, 6]返回1, 即数值 2 所在位置, 或者6, 即数值 7 所在位置.


    要找峰值,要分析每个点有哪几种情况,每个只有四种情况,

    (1)在某个峰值

    (2)在某个上升区间

    (3)在某个下降区间

    (4)在一个谷底,比左右两边的元素都小。

    首先我们可以确定的是,第一个元素和最后一个元素不可能构成一个峰值,因为峰值要求某个值要同时大于左右两侧的数。

    限定了start和end的范围,这道题我们用二分法解决。

    第三个条件选择里 else{ start  = mid} 也可以是 end = mid。

    class Solution {
        /**
         * @param A: An integers array.
         * @return: return any of peek positions.
         */
        public int findPeak(int[] A) {
            int start = 1, end = A.length-2; // 1.答案在之间,2.不会出界 
            while(start + 1 <  end) {
                int mid = start + (end - start) / 2;
                if(A[mid] < A[mid - 1]) {
                    end = mid;
                } else if(A[mid] < A[mid + 1]) {
                    start = mid;
                } else {
                    start = mid;
                }
            }
            if(A[start] < A[end]) {
                return end;
            } else { 
                return start;
            }
        }
    }
  • 相关阅读:
    Linux学习
    PHP语法笔记
    iOS二次发育(swift)闭包
    iOS二次发育(swift)类
    iOS二次发育(swift)结构体
    iOS二次发育(swift)枚举
    【NOIP2013模拟联考14】隐藏指令
    【NOIP2012模拟8.9】逐个击破
    NOIP2020.9.19模拟patrick
    NOIP2020.9.19模拟 spongebob
  • 原文地址:https://www.cnblogs.com/iwangzheng/p/5757985.html
Copyright © 2011-2022 走看看