码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Find Peak Element

时间:2015-10-14 14:16:54      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

原题链接在这里:https://leetcode.com/problems/find-peak-element/

两种方法,第一种从头到尾遍历若是找到第一个变小的值,前面一个就是peak index, 若是一直变大,就是最后一个值为peak index. Time Complexity: O(n), Space O(1).

第二种方法是二分法,如何判断接下来应该找左边还是右边呢。依据其实是比较nums[m] 和 nums[m+1], 若是nums[m] > nums[m+1], peak 一定会出现在mid 左边,包括mid.

反之peak 就会出现在mid 右边, 不包括mid. corner case, 是只有一个值,此时l == r, 直接返回l 就好。

AC Java:

 1 public class Solution {
 2     public int findPeakElement(int[] nums) {
 3         /*
 4         //Method 1
 5         for(int i = 1; i<nums.length; i++){
 6             if(nums[i] < nums[i-1]){
 7                 return i-1;
 8             }
 9         }
10         return nums.length-1;
11         */
12         //Method 2
13         int l = 0; 
14         int r = nums.length-1;
15         while(l<=r){
16             if(l == r){
17                 return l;
18             }
19             int m = l+(r-l)/2;
20             if(nums[m] > nums[m+1]){
21                 r = m;
22             }else{
23                 l = m+1;
24             }
25         }
26         return l;
27     }
28 }

 

LeetCode Find Peak Element

标签:

原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4877146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!