zoukankan      html  css  js  c++  java
  • 寻找峰值

    http://www.lintcode.com/zh-cn/problem/find-peak-element/

    注意点:以mid的位置为分类条件,波峰,上升下降,波谷,从而不会遗漏什么情况。

        设置区间长度为3比较好

     1 public int findPeak(int[] A) {
     2     if(A == null || A.length == 0) return -1;
     3     int start = 0, end = A.length - 1;
     4     //先找左上升区间,再找右下降区间,不可行,设置区间长度为3试试
     5     while(end - start > 1) {
     6         int mid = start + (end - start) / 2;
     7         if(A[mid] > A[mid -1] && A[mid] > A[mid + 1]) return mid;
     8         if(A[mid] > A[mid -1])`{
     9             start = mid;
    10         } else {
    11             end = mid;
    12         }
    13     }
    14     //其实可能数组越界的,所以还是区间长度为3靠谱,也可以判断下start -1, end+ 1是否越界,
    15     //不越界就判断下面if,否则少一个判断条件
    16     
    17     if(A[start] > A[start -1] && A[start] > A[end]) return start;
    18     if(A[end] > A[start] && A[end] > A[end + 1]) return end;
    19     
    20 }
    21 public int findPeak(int[] A) {
    22     if (A ==null || A.length == 0) {
    23         return -1;
    24     }
    25     int start = 0; int end = A.length - 1; int mid;
    26     while (end - start > 2) {
    27         mid = start + (end - start) / 2;
    28         if(A[mid] > A[mid -1] && A[mid] > A[mid + 1]) {  //mid是波峰
    29             return mid;  
    30         } else if(A[mid] > A[mid -1] && A[mid] < A[mid + 1]) { //mid是上升沿
    31             start = mid;
    32         } else { //mid是下降沿或者波谷
    33             end = mid;
    34         }
    35     }
    36     mid = start + (end - start) / 2;
    37     if (A[mid] > A[start] && A[mid] > A[end]) {
    38         return mid;
    39     } else {
    40         return -1;
    41     }
    42 }
    View Code
  • 相关阅读:
    .net 文件夹是否存在的判断
    Lock Statement And Thread Synchronization
    如何利用EnteLib Unity Interception Extension 和PIAB实现Transaction
    OSQL 命令行工具
    How to build tab sets whitch headers display at bottom in WPF?
    Monitoring Clipboard Activity in C#
    产品经理讲座的感悟
    图说
    解决技术问题的9点建议
    为啥要整理需求?
  • 原文地址:https://www.cnblogs.com/ddcckkk/p/6806297.html
Copyright © 2011-2022 走看看