难度:简单
目录
一、问题描述
这里直接采用LeetCode上面的描述。
给你一个数组 rectangles
,其中 rectangles[i] = [li, wi]
表示第 i
个矩形的长度为 li
、宽度为 wi
。
如果存在 k 同时满足 k <= li 和 k <= wi ,就可以将第 i 个矩形切成边长为 k 的正方形。例如,矩形 [4,6] 可以切成边长最大为 4 的正方形。
设 maxLen
为可以从矩形数组 rectangles
切分得到的 最大正方形 的边长。
请你统计有多少个矩形能够切出边长为 maxLen
的正方形,并返回矩形 数目 。
下面给出示例:
提示:
- 1 <= rectangles.length <= 1000
- rectangles[i].length == 2
- 1 <= li, wi <= 109
- li != wi
二、思路
1、解题思路
首先看题目,传入 n 个矩形,让我们寻找可以切割的最大的正方形,并且返回个数。
首先我们要求解,所有矩形中能切割成正方形的最大边长 maxLen ,然后再去寻找矩形两个边长 a 和 b 满足:
- a >= maxLen
- b >= maxLen
统计满足要求个矩形的个数即可。
这里我用哈希表存放了所有矩形可切割成正方形的 边长 和 个数,只用一次循环即可,最后直接去哈希表中找到,maxLen 对应的边长,并且返回个数即可。
三、解题
1、代码实现
class Solution {
public:
int countGoodRectangles(vector<vector<int>>& rectangles) {
int maxLen = 0;
unordered_map<int,int> hashTable;
for(int i = 0; i < rectangles.size(); i++){
int length = rectangles[i][0];
int weight = rectangles[i][1];
int edge = min(length,weight);
hashTable[edge]++;
maxLen = max(maxLen,edge);
}
return hashTable.find(maxLen)->second;
}
};
2、时间复杂度 and 空间复杂度
时间复杂度:,n 为传入正方形的个数
空间复杂度: