看到题目有两个需要注意的点:
1、找到索引最大的那个山峰元素并返回其索引,考虑从后往前遍历
注意不要越界就行~
2、假设 nums[-1] = nums[n] = -∞,需要对端点做处理
即:
- 在对于数组的最后一个值,只需要考虑是否大于等于前面一个值,代码如(i == n && a[i] >= a[i-1]),直接返回i即可,否则continue进行下一次循环
- 对于数组的第一个值,只需要考虑是否大于后面一个值,代码如(i == 0 && a[i] >= a[i+1]),否则continue进行下一次循环
- 对于其他情况,判断某一个值是否大于等于左右两个值,代码如a[i] >= a[i-1] && a[i] <= a[i+1]
import java.util.*; public class Solution { /** * 寻找最后的山峰 * @param a int整型一维数组 * @return int整型 */ public int solve (int[] a) { if (a == null || a.length == 0) { return 0; } int lenIndex = a.length - 1; for (int i = lenIndex; i >= 0; i--) { if (i == lenIndex) { if (a[i] >= a[i-1]) { return i; } continue; } if (i == 0) { if (a[i] >= a[i+1]) { return i; } continue; } if (a[i] >= a[i-1] && a[i] >= a[i+1]) { return i; } } return -1; } }