栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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);
	}
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490694.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号