thảo luận Leetcode contest, đường tới Guardian

  • Người tạo chủ đề Người tạo chủ đề freedom.9
  • Ngày bắt đầu Ngày bắt đầu
Trạng thái
Không mở để trả lời thêm.
Mà Q2 bị sai cái hình đúng không anh em?

1719113165194.png
 
Thiếu 4 phút để hoàn thiện Q4 :( Bỏ cuộc quá sớm, vì thấy các bác làm thì mới làm tiếp theo ý tưởng duyệt trâu ban đầu.

Java:
class Solution {
    public int[] minimumArea(int[][] grid, int li, int ri, int lj, int rj) {
        int minI = grid.length, maxI = -1;
        int minJ = grid[0].length, maxJ = -1;
        int count = 0;
      
        for (int i = li; i <= ri; i++) {
            for (int j = lj; j <= rj; j++) {
                if (grid[i][j] == 1) {
                    minI = Math.min(minI, i);
                    maxI = Math.max(maxI, i);
                    minJ = Math.min(minJ, j);
                    maxJ = Math.max(maxJ, j);
                    count++;
                }
            }
        }
        return new int[]{minI, maxI, minJ, maxJ, count};
    }
    int calArea(int[] area) {
        return (area[1]-area[0]+1)*(area[3]-area[2]+1);
    }
  
    public int minimumSum(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
      
        int[] bound = minimumArea(grid, 0, m-1, 0, n-1);
        int minI = bound[0];
        int maxI = bound[1];
        int minJ = bound[2];
        int maxJ = bound[3];
        int count = bound[4];
        int ans = Integer.MAX_VALUE;
      
        for (int i = minI; i < maxI; i++) {
            var area1 = minimumArea(grid, minI, i, minJ, maxJ);
            if (area1[4] >= count-1) {
                continue;
            }
            for (int ii = i+1; ii < maxI; ii++) {
                var area2 = minimumArea(grid, i+1, ii, minJ, maxJ);
                if (area1[4] + area2[4] >= count) {
                    continue;
                }
                var area3 = minimumArea(grid, ii+1, maxI, minJ, maxJ);
                ans = Math.min(ans, calArea(area1) + calArea(area2) + calArea(area3));
            }
            for (int j = minJ; j < maxJ; j++) {
                var area2 = minimumArea(grid, i+1, maxI, minJ, j);
                if (area1[4] + area2[4] >= count) {
                    continue;
                }
                var area3 = minimumArea(grid, i+1, maxI, j+1, maxJ);
                ans = Math.min(ans, calArea(area1) + calArea(area2) + calArea(area3));
            }
        }
        for (int i = minI+1; i <= maxI; i++) {
            var area1 = minimumArea(grid, i, maxI, minJ, maxJ);
            if (area1[4] >= count-1) {
                continue;
            }
            for (int j = minJ; j < maxJ; j++) {
                var area2 = minimumArea(grid, minI, i-1, minJ, j);
                if (area1[4] + area2[4] >= count) {
                    continue;
                }
                var area3 = minimumArea(grid, minI, i-1, j+1, maxJ);
                ans = Math.min(ans, calArea(area1) + calArea(area2) + calArea(area3));
            }
        }
      
        for (int j = minJ; j < maxJ; j++) {
            var area1 = minimumArea(grid, minI, maxI, minJ, j);
            if (area1[4] >= count-1) {
                continue;
            }
            for (int jj = j+1; jj < maxJ; jj++) {
                var area2 = minimumArea(grid, minI, maxI, j+1, jj);
                if (area1[4] + area2[4] >= count) {
                    continue;
                }
                var area3 = minimumArea(grid, minI, maxI, jj+1, maxJ);
                ans = Math.min(ans, calArea(area1) + calArea(area2) + calArea(area3));
            }
            for (int i = minI; i < maxI; i++) {
                var area2 = minimumArea(grid, minI, i, j+1, maxJ);
                if (area1[4] + area2[4] >= count) {
                    continue;
                }
                var area3 = minimumArea(grid, i+1, maxI, j+1, maxJ);
                ans = Math.min(ans, calArea(area1) + calArea(area2) + calArea(area3));
            }
        }
        for (int j = minJ+1; j <= maxJ; j++) {
            var area1 = minimumArea(grid, minI, maxI, j, maxJ);
            if (area1[4] >= count-1) {
                continue;
            }
            for (int i = minI; i < maxI; i++) {
                var area2 = minimumArea(grid, minI, i, minJ, j-1);
                if (area1[4] + area2[4] >= count) {
                    continue;
                }
                var area3 = minimumArea(grid, i+1, maxI, minJ, j-1);
                ans = Math.min(ans, calArea(area1) + calArea(area2) + calArea(area3));
            }
        }
        return ans;
    }
}
 
Trạng thái
Không mở để trả lời thêm.

Thống kê chủ đề

Ngày tạo
freedom.9,
Người trả lời cuối
freedom.9,
Trả lời
2.480
Lượt xem
130.244
Quay lại
Lên đầu trang