问题描述:
解题思路:
解题思想是一种穷举的思想。
设置两个循环变量i和j,i从0开始,j从i+1开始,比较所有可能形成的矩形,找出最大的面积值。
j从i+1位置处往右递进,找到i到j之间的最小的矩形高度,tempArea变量表示从i到j的最大面积。当j“走到尽头”后,tempArea就表示i位于某个位置找到的最大的矩形面积。basicArea表示的是i位于某个位置的最大面积,i每走一步,就判断basicArea是否大于找到的最大面积。 tempHeight表示当前遍历到的矩形的高度。
把这种思路理解为“二次比较大小,选取最大值”。下图是执行过程。
代码实现:
public class CCF201312_03 { public static void main(String[] args) { System.out.print("请输入矩形个数:"); Scanner scanner=new Scanner(System.in); int N=scanner.nextInt(); int[] heightArr=new int[N]; for(int i=0;i<N;i++){ heightArr[i]=scanner.nextInt(); } int maxArea=0; int tempArea=0; int basicArea=0; int tempMinHeight=100; for (int i=0;i<N;i++) { basicArea=heightArr[i]; tempMinHeight=heightArr[i]; for (int j=i+1;j<N;j++) { if (tempMinHeight>heightArr[j]) tempMinHeight=heightArr[j]; tempArea=tempMinHeight*(j-i+1); if (tempArea>basicArea) basicArea=tempArea; } if (basicArea>maxArea) maxArea=basicArea; } System.out.println("最大矩形面积是:"+maxArea); } }