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>
因为题目给出了条件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>
相关文章推荐
- LeetCode Find Peak Element [TBD]
- 【Leetcode】Find Peak Element
- LeetCode:Find Peak Element
- leetcode——Find Peak Element
- leetcode 162 —— Find Peak Element
- LeetCode Find Peak Element
- [LeetCode]Find Peak Element
- [leetcode 162] Find Peak Element
- [LeetCode]Find Peak Element
- [leetcode] Find Peak Element
- Find Peak Element —— Leetcode
- Find Peak Element -- leetcode
- LeetCode Find Peak Element
- Leetcode:Find Peak Element
- leetcode_Find Peak Element
- leetcode[162] Find Peak Element
- LeetCode162 Find Peak Element
- leetcode-162 Find Peak Element
- LeetCode Find Peak Element
- [Leetcode]Find Peak Element