您的位置:首页 > 其它

一些遇到的有趣的程序题

2015-09-12 16:34 183 查看


package demo;

/**
* @author JD
*程序是计算数组直方图最大矩形面积,直方图每列宽度为1,如{2,7,9,4,1}的最大矩形面积是7*2=14;
*思路:从左往右,从a[0]到a[n-1],依次计算能和a[i]组成矩形的最大面积,因为只有大于或者等于a[i]才能和a[i]组成矩形块
*所以分别从a[i]开始,从左扩展计算能和a[i]组成的矩形的块数,再往右计算能和a[i]组成的矩形的块数,把它们相加,乘以a[i],
*就是能和a[i]组成矩形的最大面积;
*/
public class Get_Max_Rect {

public static void main(String[] args) {
// TODO Auto-generated method stub

int[] a={2,1,5,6,2,3};
System.out.println(max(a,a.length));
}

private static int max(int[] a, int len) {
// TODO Auto-generated method stub
int mx=a[0];
int count ;
for(int i=0;i<len;i++){

count=0;
int j=i;
while(j>=0){
//必须必a[i]大,不然矩形凹陷,不能计算以a[i]为宽的矩形面积
if(a[i]<=a[j]){
j--;
count++;
}else{
break;
}
}

System.out.println(count);
j=i+1;
while(j<=len-1){
if(a[i]<=a[j]){
j++;
count++;
}else{
break;
}
}
System.out.println(count);
if(mx<a[i]*count){
mx=a[i]*count;
}

}
return mx;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: