赞
踩
用单调队列的思想实现这道题目,我们可以用一个单调队列维护矩阵中每一行的最大值和最小值。从左到右遍历每一行,每遍历到一个元素,就将该元素的位置加入到单调队列中。每次加入元素的时候,都会将队列中比该元素大的元素弹出队列。最后,我们可以维护两个单调队列,一个存储最大值,一个存储最小值。
用这样的方法,我们就能够在遍历到每一行时维护该行的最大值和最小值。接下来,我们可以从上到下遍历每一列,将每一列的最大值和最小值加入到两个单调队列中。每次加入元素的时候,都会将队列中超出当前列的元素弹出队列。最后,我们可以将最大值和最小值的差值与 limit 进行比较,如果小于等于 limit,就更新最大面积。
示例代码:
``` import java.util.Deque; import java.util.LinkedList; import java.util.Scanner;
public class Main {
- public static void main(String[] args) {
- Scanner sc= new Scanner(System.in);
- int n = sc.nextInt();
- int m = sc.nextInt();
- int[][] matrix = new int[n][m];
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- matrix[i][j] = sc.nextInt();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。