问题:
解题:
分析:寻找峰值就是找到拐点,就是上升转变成下降的拐点,除此之外需要考虑开始和结束的边界,开始若是下降,说明第一个是峰值,若是最后是上升,说明最后一个是峰值
class Solution {
public int findPeakElement(int[] nums) {
if (nums.length < 2) {
return 0;
}
int before, after, bIndex;
Boolean riseFlag = null;
for (int i = 1; i < nums.length; i++) {
bIndex = i - 1;
before = nums[bIndex];
after = nums[i];
if (before < after) {
// 上升
riseFlag = true;
} else if (before > after) {
// 下降
if (null == riseFlag) {
// 说明是第一个是峰值
return bIndex;
} else if (riseFlag) {
// 之前是上升,说明到达峰值
return bIndex;
}
// 最后改变riseFlag
riseFlag = false;
}
}
// 最后是上升的话,最后一个也是峰值
if (null != riseFlag && riseFlag) {
return nums.length - 1;
}
return 0;
}
}
性能:
没有多余操作,比较快