• 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;
            }
        }
    }
  • 相关阅读:
    .net编程扫盲(*)
    接口编程扫盲(多态)
    (转)栈与堆栈的区别
    (转).NET基础拾遗(5)多线程开发基础
    (转)你应该知道的计算机网络知识
    网络代理的基础知识
    某代理网站免费IP地址抓取测试
    常用Maven插件介绍
    Maven打jar发布包的常用配置
    Apache Commons CLI 开发命令行工具示例
  • 原文地址:https://www.cnblogs.com/iwangzheng/p/5757985.html
Copyright © 2020-2023  润新知