美团2017 JAVA
[编程题]大富翁游戏
[编程题]拼凑钱币
[编程题]最大矩形面积
[编程题]最长公共连续子串
矩形的高度取决于最短的柱子,我的解法是通过排个序,从短柱子开始求矩形面积。这个排序对性能的影响还没想明白。另外stream特性是真的好用,一旦拥有,爱不释手。
题目解答的高赞评论里有一个分治解法的,效率可能不高,但是属实很秀,诸位可以去看看。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
int max=0;
public static void main(String[] args){
Main s=new Main();
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int h[]=new int[n];
for (int i=0;i<n;i++){
h[i]=in.nextInt();
}
Arrays.stream(h).distinct().forEach(x->s.s(x,h));
System.out.print(s.max);
}
//当前矩形面积如果大于max就更新max
void s(int a,int[] h){
int cnt=0;
for(int i:h){
if (i>=a){
cnt+=a;
if (cnt>max){
max=cnt;
}
}else{
cnt=0;
}
}
}
}