1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| package org.stone.study.algo.ex202411;
import java.util.HashMap; import java.util.Map; import java.util.Scanner;
public class MaxArea { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int m = scanner.nextInt(); int n = scanner.nextInt(); scanner.nextLine();
int[][] grid = new int[m][n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { grid[i][j] = scanner.nextInt(); } scanner.nextLine(); }
int ans = maxArea(m, n, grid); System.out.println(ans); }
public static int maxArea(int m, int n, int[][] grid) { Map<Integer, int[]> map = new HashMap<>(); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (grid[i][j] != 0) { if(map.containsKey(grid[i][j])) { int[] arr = map.get(grid[i][j]); arr[0] = Math.min(arr[0], i); arr[1] = Math.max(arr[1], i); arr[2] = Math.min(arr[2], j); arr[3] = Math.max(arr[3], j); map.put(grid[i][j], arr); } else { map.put(grid[i][j], new int[]{i, i, j, j}); } } } }
int maxArea = 0; for (Map.Entry<Integer, int[]> entry : map.entrySet()) { int[] arr = entry.getValue(); int area = (arr[1] - arr[0] + 1) * (arr[3] - arr[2] + 1); maxArea = Math.max(maxArea, area); }
return maxArea; } }
|