Given a mountain sequence of n
integers which increase firstly and then decrease, find the mountain top.
Example
Given nums
= [1, 2, 4, 8, 6, 3]
return 8
Given nums
= [10, 9, 8, 7]
, return 10
public int mountainSequence(int[] nums) {
if (nums == null || nums.length == 0) {
System.out.println("arugments error");
return -1;
}
int start = 0;
int end = nums.length - 1;
int mid = 0;
while (start + 1 < end) {
mid = start + (end - start) / 2;
if (nums[mid] < nums[mid + 1]) {
start = mid;
} else {
end = mid;
}
}
return (nums[start] > nums[end] ? nums[start] : nums[end]);
}
Solution 2:
public int mountainSequence(int[] nums) {
if (nums == null || nums.length == 0) {
return -1;
}
int start = 0;
int end = nums.length - 1;
int m1 = 0;
int m2 = 0;
while (start + 1 < end) {
m1 = start + (end - start) / 2;
m2 = end - (end - m1) / 2;
if (nums[m1] < nums[m2]) {
start = m1 + 1;
} else if (nums[m1] > nums[m2]) {
end = m2 + 1;
} else {
start = m1;
end = m2;
}
}
return Math.max(nums[start], nums[end]);
}
该方法要注意 m2 的赋值。应该要由end - 来获得。