求最大子矩阵的大小(offer收割)

题目

给定一个整型矩阵map,其中的值只有0和1两种,求其中全是1的全部矩形区域中,最大的矩形区域为1的数量。 例如: 1 1 1 0 其中,最大的矩形区域有3个1,因此返回3。 再如: 1 0 1 1 1 1 1 1 1 1 1 0 其中,最大的矩形区域有6个1,因此返回6.java

代码

package com.iqiyi;

import java.util.LinkedList;

public class Code1_9 {
	
	public static int maxRecSize(int[][] map){
		int ans=0;
		int[] line=new int[map[0].length];
		for(int i=0;i<map.length;i++){
			for(int j=0;j<map[i].length;j++){
				if(map[i][j]==0)
					line[j]=0;
				else {
					line[j]++;
				}
			}
			LinkedList<Integer> linkedList=new LinkedList<Integer>();
			for(int t:line){
				while(!linkedList.isEmpty()&&linkedList.peekFirst()>t){
					linkedList.removeFirst();
					linkedList.addLast(t);
				}
				if(linkedList.isEmpty())
					linkedList.addLast(t);
				else
					linkedList.addLast(linkedList.peekFirst());
				int temp=linkedList.peekFirst()*linkedList.size();
				if(temp>ans)
					ans=temp;
			}
		}
		return ans;
	}
	
	public static void main(String[] args){
		int[][] map=new int[][]{{1,0,1,1},{1,1,1,1},{1,1,1,0}};
		System.out.println(maxRecSize(map));
	}

}
复制代码
相关文章
相关标签/搜索