您的位置:首页 > 其它

leetcode:Find Peak Element

2014-12-09 23:45 375 查看
题目的要求是找出数组中的极大值并返回其下标  num[i] > num[i + 1] && num[i + 1]

因为题目给出了条件num[i] != num[i + 1]

使用二分的方法 ,对于mid = (low + hight) / 2

如果num[mid] > num[mid + 1] && num[mid - 1] 显然mid是极大值下标

如果num[mid - 1] > num[mid] && num[mid]  > num[mid + 1] 那么 在 [low ,mid - 1]处在极大值

如果num[mid - 1] < num[mid] && num[mid]  < num[mid + 1] 那么 在 [mid + 1 ,hight]处在极大值

如果num[mid] < num[mid - 1] && num[mid] < num[mid + 1] ,两边都存在极大值

<span style="font-size:18px;">public class Solution {
static int len = 0;
public int findPeakElement(int[] num) {
if(num != null){
if(num.length == 1) return 0;
if(num.length == 2) return num[0] > num[1] ? 0 : 1;
if(num[0] > num[1]) return 0;
len = num.length - 1;
if(num[len] > num[len - 1]) return len;

return findPeakElement(num, 1, len - 1);
}
return -1;
}

public int findPeakElement(int[] num, int start, int end){
int low = start;
int hight = end;
while(low <= hight){
int mid = (low + hight) / 2;
if(num[mid] > num[mid - 1] && num[mid] > num[mid + 1]){
return mid;
}
if(num[mid - 1] > num[mid] && num[mid] > num[mid + 1]){
hight = mid - 1;
}
else low = mid + 1;
}
return -1;
}
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: