求最大子矩陣的大小(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));
	}

}
複製代碼
相關文章
相關標籤/搜索