1. 题目描述
2. 解题思路
(1) 对所有点按照x坐标
从小到大排序;
(2) 维护一个右边界;
(3) 判断每个点的横坐标是否超出右边界,若超出,则更新右边界
以及最终矩阵数量res
。
3. 代码实现
class Solution {
public:
int minRectanglesToCoverPoints(vector<vector<int>>& points, int w) {
// 按照x坐标的大小排序
sort(points.begin(), points.end(),
[](const vector<int>& a, const vector<int>& b) {
return a[0] < b[0];
});
int res = 0;
// 维护矩形的右边界
int right = -1;
for (auto& point : points) {
if (point[0] > right) {
// 修改矩阵的右边界
right = point[0] + w;
res++;
}
}
return res;
}
};
4. c++知识点
使用 lambda
表达式可以灵活地定义各种排序规则,以满足不同的需求。
// 按第一个维度排序
sort(points.begin(), points.end(),
[](const vector<int>& a, const vector<int>& b) {
return a[0] < b[0];
});