csp 最大的矩形 (双指针,java)

csp 最大的矩形 (双指针,java),第1张

csp 最大的矩形 (双指针,java)


    找到最大的矩形,这个矩形的决定因素是最低的高,主要的思路就是将每一个数组元素作为高,得到以这个数组元素作为高的最大面积,然后找到面积的最大值。
    问题来了,如何找到以这个元素为高的最大面积呢?就以问题描述中的6为例,我们要找到5左右两边离5最近的比5小的位置,左边就是1,右边就是2,然后以5为高的面积最大值就是(2的下标-1的下标-1)*5。
    然后问题又来了,为什么是要找两边离5最近的比5小的值呢?因为由这两个小的值确定的矩形里面的高要么是等于5要么是大于5,所以这个区间内部就是以5为高的最大的面积。

import java.util.ArrayList;
import java.util.Map;
import java.util.Scanner;


public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int[] heights=new int[n];
		for(int i=0;i=0并且left指向的高大于等于选定的这个高,左指针就左移
            int left = i - 1;
            while(left >= 0 && heights[left] >= heights[i]){
                left--;
            }
            //找到右边第一个小于高的位置下标
            //如果right小于数组长度
            //并且right指向的高大于等于选定的高,右指针就右移
            int right = i + 1;
            while(right < heights.length && heights[right] >= heights[i]){
                right++;
            }
            //更新面积的最大值
            maxArea = Math.max(maxArea, (right - left - 1) * heights[i]);   
        }
	    System.out.println(maxArea);
	}
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5482818.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存