给定一个数组,如果先递增,再递减,那么就可称为山峰,求给定数组的最长山峰,要求山峰的长度要大于3.
问题分析: 将每一个元素都当成峰顶,依次计算左边和右边的最长长度,得到山峰长度。
public static int maxLength (int[] nums) {
int result = 0;
if(nums.length < 3){
return 0;
}
//先将每一个点作为山峰顶点
for(int i = 1; i <= nums.length - 2; i++){
int left = i - 1;
int right = i + 1;
if(nums[left] < nums[i] && nums[right] < nums[i]){
while(left >= 0 && nums[left] < nums[left + 1]){
left--;
}
while(right <= nums.length - 1 && nums[right] > nums[right - 1]){
right++;
}
int maxLength = right - left + 1;
if(maxLength > result){
result = maxLength;
}
}
}
return result;
}
808

被折叠的 条评论
为什么被折叠?



