每日一题 0204
作者:互联网
(2022.02.04) 每日一题 可以形成最大正方形的矩形数目
一道简单的模拟题,思路就是模拟题目的方式。很快地写出来,但是写的就是很冗长,没有去优化。接下来就需要和官方题解去对比,去优化自己的思路。
1、我的思路是用一个vector去存储所有矩形最小的边长,这个也是可以切分最大正方形的最大边长,然后遍历去获取所有正方形中的最大边长,再通过一次遍历去寻找可以切分成最大正方形的矩形数目。
2、官方的思路,首先比较大小的时候,使用了min函数,我老是对于c++可以直接调用的函数不太熟悉,这个需要一步步去记忆,使用,比如新的emplace_back替代push_back。
3、然后根据官方的思路修改了一下,没有使用min函数,如果使用min函数,进一步修改就是官方题解,空间复杂度降低了。
//first
class Solution {
public:
int countGoodRectangles(vector<vector<int>>& rectangles) {
int maxLen = 0;
vector<int> maxRec;
int ans = 0;
for(auto& temp:rectangles){
if(temp[0]<=temp[1]){
maxRec.emplace_back(temp[0]);
if(temp[0]>maxLen){
maxLen = temp[0];
}
}else{
maxRec.emplace_back(temp[1]);
if(temp[1]>maxLen){
maxLen = temp[1];
}
}
}
for(auto& rec:maxRec){
if(rec<maxLen){
continue;
}
++ans;
}
return ans;
}
};
//second
class Solution {
public:
int countGoodRectangles(vector<vector<int>>& rectangles) {
int maxLen = 0;
int ans = 0;
for(auto& temp:rectangles){
if(temp[0]<=temp[1]){
if(temp[0]>maxLen){
maxLen = temp[0];
ans = 1;
}else if(temp[0] == maxLen){
++ans;
}
}else{
if(temp[1]>maxLen){
maxLen = temp[1];
ans = 1;
}else if(temp[1] == maxLen){
++ans;
}
}
}
return ans;
}
};
//official
class Solution {
public:
int countGoodRectangles(vector<vector<int>>& rectangles) {
int res = 0, maxLen = 0;
for (auto & rectangle : rectangles) {
int l = rectangle[0], w = rectangle[1];
int k = min(l, w);
if (k == maxLen) {
++res;
} else if (k > maxLen) {
res = 1;
maxLen = k;
}
}
return res;
}
};
标签:temp,int,每日,else,maxLen,0204,ans,rectangles 来源: https://www.cnblogs.com/kusola9808/p/15862679.html