题目描述 给你一个二维数组 nums ,其中 nums[i]=[li,wi] 表示第 i 个矩形的长度为 li 、宽度为 wi 。 如果存在 k 同时满足 k≤li 和 k≤wi ,就可以将第 i 个矩形切成边长为 k 的正方形。例如,矩形 [5,7] 可以切成边长最大为 5 的正方形。 设 maxLen 为可以从矩形数组 nums 切分得到的最大正方形的边长。 请你计算有多少个矩形能够切出边长为 maxLen 的正方形,并返回矩形数目 。 输入输出格式 输入格式 一行二维整型数组。 输出格式 一行整数。 输入输出样例 输入 [[2,3],[3,7],[4,3],[3,7]] 输出 3 解释 [[2,3],[3,7],[4,3],[3,7]]中,[3,7],[4,3],[3,7]三个矩形都可以切出边长最大为 3 的正方形,因此输出 3。 说明提示 1≤nums.length≤1000 nums[i].length=2 1≤li,wi≤109 li=wi用c++编写程序
时间: 2023-12-15 20:05:37 浏览: 70
以下是C++代码实现:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<vector<int>> nums;
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int l, w;
cin >> l >> w;
nums.push_back({l, w});
}
int maxLen = 0; // 切分得到的最大正方形的边长
for (auto& num : nums)
{
maxLen = max(maxLen, min(num[0], num[1]));
}
int count = 0; // 可以切出边长为 maxLen 的正方形的矩形数目
for (auto& num : nums)
{
if (min(num[0], num[1]) >= maxLen)
{
count++;
}
}
cout << count << endl;
return 0;
}
```
思路说明:
首先遍历一遍数组,找到可以切分得到的最大正方形的边长。
然后再遍历一遍数组,统计可以切出边长为 maxLen 的正方形的矩形数目。
时间复杂度为 O(n)。
阅读全文