/* * @Author: LetMeFly * @Date: 2025-09-02 13:08:07 * @LastEditors: LetMeFly.xyz * @LastEditTime: 2025-09-02 13:51:14 * @Description: rewrite from 0 */ classSolution { private: inlineboolcheck(vector<vector<int>>& points, int i, int j){ return i != j && points[i][0] <= points[j][0] && points[i][1] >= points[j][1]; }
inlineboolcheck(vector<vector<int>>& points, int i, int j, int k){ return !(points[i][0] <= points[k][0] && points[k][0] <= points[j][0] && points[i][1] >= points[k][1] && points[k][1] >= points[j][1]); } public: intnumberOfPairs(vector<vector<int>>& points){ int ans = 0; for (int i = 0; i < points.size(); i++) { for (int j = 0; j < points.size(); j++) { if (!check(points, i, j)) { continue; } bool can = true; for (int k = 0; k < points.size(); k++) { if (k == i || k == j) { continue; } if (!check(points, i, j, k)) { can = false; break; } } ans += can; } } return ans; } };
classSolution { private: inlineboolcheck(vector<vector<int>>& points, int i, int j){ // 易错点3:单独的(i, j)也要check if (points[i][0] > points[j][0] || points[i][1] < points[j][1]) { // 易错点1:注意这里纵坐标大于等于才合法 returnfalse; } returntrue; } inlineboolcheck(vector<vector<int>>& points, int i, int j, int k){ if (points[i][0] <= points[k][0] && points[k][0] <= points[j][0] && points[i][1] >= points[k][1] && points[k][1] >= points[j][1]) { returnfalse; } returntrue; } public: intnumberOfPairs(vector<vector<int>>& points){ int ans = 0; for (int i = 0; i < points.size(); i++) { for (int j = 0; j < points.size(); j++) { if (i == j) { continue; } if (!check(points, i, j)) { continue; } bool can = true; // 易错点2:有一个k导致不符就不符 for (int k = 0; k < points.size(); k++) { if (k == i || k == j) { continue; } if (!check(points, i, j, k)) { can = false; break; } } ans += can; } } return ans; } };
defnumberOfPairs(self, points: List[List[int]]) -> int: ans = 0 n = len(points) self.points = points for i inrange(n): for j inrange(n): if i == j: continue ifnotself.check2(i, j): continue can = True for k inrange(n): if k == i or k == j: continue ifnotself.check3(i, j, k): can = False break ans += can return ans
funcnumberOfPairs(points [][]int) (ans int) { for i := range points { for j := range points { if i == j { continue } if !check2_3025(points, i, j) { continue } can := true for k := range points { if k == i || k == j { continue } if !check3_3025(points, i, j, k) { can = false break } } if can { ans++ } } } return }