3027. 人员站位的方案数 II
Problem: 3027. 人员站位的方案数 II
文章目录
- 思路
- 解题过程
- 复杂度
- Code
思路
排序,把
points
按照x
从小到大排序,满足x1<=x2
,如果x
相同,就按y
降序排序,确保y1>=y2
。
解题过程
固定左点
i
,向右扫点j
,maxj
记录i
和j
之间出现的最大y值。
如果maxy
等于y1
说明找到一个点等于左端的y值,不可能有更大的值,结束循环。
复杂度
- 时间复杂度: O(n2)O(n^2)O(n2)
- 空间复杂度: O(1)O(1)O(1)
Code
class Solution {
public:int numberOfPairs(vector<vector<int>>& points) {ranges::sort(points, {}, [](auto& p) { return pair(p[0], -p[1]); });int ans = 0, n = points.size();for (int i = 0; i < n; i++) {int y1 = points[i][1];int maxy = INT_MIN;for (int j = i + 1; j < n && maxy < y1; j++) {int y2 = points[j][1];if (y2 <= y1 && maxy < y2) {maxy = y2;ans++;}if (maxy == y1)break;}}return ans;}
};