求柱状图最大面积

浅浅的花香味﹌ 2022-06-07 00:43 305阅读 0赞

给定一组非负整数组成的数组h,代表一组柱状图的高度,其中每个柱子的宽度都为1。 在这组柱状图中找到能组成的最大矩形的面积(如图所示)。 入参h为一个整型数组,代表每个柱子的高度,返回面积的值。
这里写图片描述

代码实现:

  1. public static int findLCS(int[] arr, int n) {
  2. int res = 0;
  3. int min = Integer.MAX_VALUE;
  4. for (int i = 0; i < n; i++) {
  5. min = Integer.MAX_VALUE;
  6. for (int j = i; j < n; j++) {
  7. min = Math.min(min, arr[j]);
  8. int cur = (j - i + 1) * min;
  9. res = Math.max(cur, res);
  10. }
  11. }
  12. return res;
  13. }

变种的暴力破解法:

  1. import java.util.Scanner;
  2. /*
  3. * 遍历数组每一个值,然后用两个指针从当前位置向两边寻找左右边界,大于等于当前值时则对应指针加1,
  4. * 这样最后得到以当前值为最小高度的矩形宽度,然后计算面积并与最大值比较并保存其中最大的值
  5. */
  6. public class Main {
  7. public static void main(String[] args){
  8. Scanner sc = new Scanner(System.in);
  9. int n = sc.nextInt();
  10. int[] height = new int[n];
  11. for(int i =0;i<n;i++){
  12. height[i] = sc.nextInt();
  13. }
  14. int maxArea = -1;
  15. for(int i = 0;i<n;i++){
  16. int left=i;
  17. int right=i;
  18. //计算以当前值为最小高度的矩形面积
  19. while(left > 0 && height[left-1] >= height[i]) left--;//寻找左边界
  20. while(right < n-1 && height[right+1] >= height[i]) right++;//寻找右边界
  21. int tempArea = (right-left+1) * height[i];
  22. if(maxArea<tempArea) maxArea=tempArea;
  23. }
  24. System.out.println(maxArea);
  25. }
  26. }

发表评论

表情:
评论列表 (有 0 条评论,305人围观)

还没有评论,来说两句吧...

相关阅读

    相关 面积

    > 给定一组非负整数组成的数组h,代表一组柱状图的高度,其中每个柱子的宽度都为1。 在这组柱状图中找到能组成的最大矩形的面积(如图所示)。 入参h为一个整型数组,代表每个柱子的