其他分享
首页 > 其他分享> > 每日一题 0204

每日一题 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