📖本篇内容:leetcode每日一题1725. 可以形成最大正方形的矩形数目 哈希表存储 到 贪心遍历 优化
📑 文章专栏:leetcode每日一题《打卡日常》
📆 最近更新:2022年2月3日 1414. 和为 K 的最少斐波那契数字数目 贪心+递归 大年初三力扣是想意思意思一下呗~
🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起
🙊写在前面🙊
大年初四,被亲戚当成动物园里的动物观摩,阿巴不~这种感觉你绝对想不到,手里那这键盘,一头乱发的小付吃着零食,被亲戚们投喂的感觉,你们知道么!我敢说,绝对是大型社死现场… 还是来刷提吧,消散我这蛋蛋的忧伤!
题目
给你一个数组 rectangles ,其中 rectangles[i] = [li, wi] 表示第 i 个矩形的长度为 li 、宽度为 wi 。
如果存在 k 同时满足 k <= li 和 k <= wi ,就可以将第 i 个矩形切成边长为 k 的正方形。例如,矩形 [4,6] 可以切成边长最大为 4 的正方形。
设 maxLen 为可以从矩形数组 rectangles 切分得到的 最大正方形 的边长。
请你统计有多少个矩形能够切出边长为 maxLen 的正方形,并返回矩形 数目 。
示例
示例1:
输入:k = 7
输入:rectangles = [[5,8],[3,9],[5,12],[16,5]]
输出:3
解释:能从每个矩形中切出的最大正方形边长分别是 [5,3,5,5] 。
最大正方形的边长为 5 ,可以由 3 个矩形切分得到。
示例2:
输入:rectangles = [[2,3],[3,7],[4,3],[3,7]]
输出:3
提示
1 <= rectangles.length <= 1000
rectangles[i].length == 2
1 <= li, wi <= 10^9
li != wi
📝思路📝
第一种思路
:可以称得上是暴力AC
,我们可以维护一个哈希表
用于存储每个矩形对应的最大可切割成
正方形的边长curMaxLen
,同时维护一个全局最大可分割的正方形边长,进行一次遍历即可。第二种思路
:有了上述思路那就容易多了,对于昨天的贪心题,今天又有了用武之地,咱们试着简化上述代码进行遍历求解即可
。
⭐代码实现⭐
哈希表暴力AC法
class Solution {
public int countGoodRectangles(int[][] rectangles) {
Map<Integer,Integer>map = new HashMap<>();
//初始化当前全局最大可分割正方形的边长
int maxLen = Math.min(rectangles[0][0],rectangles[0][1]);
int n = rectangles.length;
//进行遍历
for (int i = 0 ;i< n;i++){
//计算当前矩形可分割的最大正方形边长
int curMaxLen = Math.min(rectangles[i][0],rectangles[i][1]);
//计数
map.put(curMaxLen,map.getOrDefault(curMaxLen,0)+1);
//求全局最长
maxLen = Math.max(maxLen,curMaxLen);
}
//返回个数
return map.get(maxLen);
}
}
贪心遍历优化
class Solution {
public int countGoodRectangles(int[][] rectangles) {
//用于记录结果
int count = 0 ;
//初始化当前全局最大可分割正方形的边长
int maxLen = Math.min(rectangles[0][0],rectangles[0][1]);
//遍历
for (int i = 0 ; i< rectangles.length;i++){
//计算当前矩形可分割的最大正方形边长
int curMaxLen = Math.min(rectangles[i][0],rectangles[i][1]);
//如果当前可分割的最大正方形边长比之前全局能分割的最大正方形边长要大的话
//进行赋值重新计数
if (curMaxLen > maxLen){
maxLen = curMaxLen;
count = 1;
//如果能再次匹配到全局能切割的最大的正方形边长则数量自增
}else if (curMaxLen == maxLen)count ++;
}
//返回个数
return count;
}
}
运行结果
哈希表暴力AC
贪心遍历优化
🙊写在最后🙊
2022-2-4今天小付打卡了哦~
今天是大年初四,祝大家幸福美满,欢天喜地~
美好的日出 美好的山河
都因有你存在 而璀璨 耀眼