解题思路: 这道题用一般暴力解法只能得到70分。 因此,我们来分析一下岛屿的情况,当P非常大的时候,所有的数都会被海水淹没,此时没有岛屿,岛屿数为0,然后,P慢慢减小(也就是海平面逐渐下降),岛屿数就会出现变化,每当一个凸峰出现,岛屿数就会多一个,每当一个凹谷出现,岛屿数就减少一个(原本相邻的两个岛屿被这个凹谷连接在一起了)。 在用程序实现时,值得注意的是,需要去除相邻重复的元素。
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
int n=in.nextInt();
int arr[]=new int[n+2];
arr[0]=arr[n+1]=0; //用来设置边界值,起辅助计算的作用,简化程序代码
for(int i=1;i<=n;i++) {
arr[i]=in.nextInt();
}
int d[]=new int [10001]; //d[i]表示海平面下降到i时,岛屿数量的变化
int brr[]=new int [arr.length];
brr[0]=0;
int j=1;
for(int i=1;i<=n;i++) {
if(arr[i]==arr[i-1]) {
continue;
}else {
brr[j]=arr[i];
j++;
}
}
brr[j]=0;
for(int i=1;i<j;i++) {
if(brr[i-1]<brr[i]&&brr[i]>brr[i+1])
d[brr[i]]++;
else if(brr[i-1]>brr[i]&&brr[i]<brr[i+1])
d[brr[i]]--;
}
int ans=0,sum=0;
for(int i=10000;i>=1;i--) {
sum+=d[i];
ans=Math.max(ans,sum);
}
System.out.println(ans);
}
}