由题意可知:
我们应该尽可能的寻找更大的值 ------ 贪心
- 当 k >= n 时 直接返回数组中最大值就好了
- 当 k < n 时,可发现第k个元素(也就是 nums[k-1]) 是无论如何都不可能成为栈顶的。所以有 res = Max( 第k个元素之前的最大值 , nums[k]);
说明一下:下标是以0开始的,所以第k个元素下标是k-1,第k+1元素下标是k; 还不明白可看下面的图。
然后处理一下特殊条件就好了
class Solution {
public int maximumTop(int[] nums, int k) {
int n = nums.length;
if (k == 0) return nums[0];
if (n == 1) return k % 2 == 0 ? nums[0] : -1;
int res = 0;
int t = k - 1;
for (int i = 0; t > 0 && i < n; i++, t--) {//循环 k - 1次 或者 整个数组
res = Math.max(nums[i], res); //记录第k元素之前的最大值。
}
if (k < n) {
res = Math.max(nums[k], res);//第k+1个元素和k元素之前最大值比较
}
return res;
}
}