力扣每日一题:2132. 用邮票贴满网格图(2023-12-14)
2023-12-14 10:51:04
力扣每日一题
题目:2132. 用邮票贴满网格图
日期:2023-12-14
用时:38 m 32 s
思路:使用前缀和+差分,只是往常是一维,现在变二维了,原理差不多
时间:22ms
内存:98.24MB
代码:
class Solution {
public boolean possibleToStamp(int[][] grid, int stampHeight, int stampWidth) {
int xl = grid.length;
int yl = grid[0].length;
// 前缀和
int[][] sum = new int[xl+1][yl+1];
for(int i=1;i<=xl;i++){
for(int j=1;j<=yl;j++){
sum[i][j] = sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+grid[i-1][j-1];
}
}
// 差分
int[][] cnt = new int[xl+2][yl+2];
for(int xStart=stampHeight;xStart<=xl;xStart++){
for(int yStart=stampWidth;yStart<=yl;yStart++){
int xEnd = xStart-stampHeight+1;
int yEnd = yStart-stampWidth+1;
if(sum[xStart][yStart]+sum[xEnd-1][yEnd-1]-sum[xStart][yEnd-1]-sum[xEnd-1][yStart]==0){
cnt[xEnd][yEnd]++;
cnt[xStart+1][yStart+1]++;
cnt[xEnd][yStart+1]--;
cnt[xStart+1][yEnd]--;
}
}
}
// 判断单元格是否能放邮戳
for(int i=1;i<=xl;i++){
for(int j=1;j<=yl;j++){
cnt[i][j] += cnt[i][j-1]+cnt[i-1][j]-cnt[i-1][j-1];
if(grid[i-1][j-1]==0&&cnt[i][j]==0){
return false;
}
}
}
return true;
}
}
文章来源:https://blog.csdn.net/huangge1199/article/details/134987686
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!