(nice!!!)(LeetCode 每日一题) 3025. 人员站位的方案数 I (排序)

发布于:2025-09-03 ⋅ 阅读:(23) ⋅ 点赞:(0)

题目:3025. 人员站位的方案数 I

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路:排序,时间复杂度0(n^2)。
将数组points里的元素先按横坐标x升序排序,纵坐标y降序排序。第一层for循环枚举左上角的点,第二层for循环枚举右下角的点。细节看注释。

C++版本:

class Solution {
public:
    typedef pair<int,int> PII;
    static bool cmp(PII a,PII b){
        if(a.first==b.first) return b.second<a.second;
        return a.first<b.first;
    }
    int numberOfPairs(vector<vector<int>>& points) {
        vector<PII> v;
        for(auto item: points){
            v.push_back({item[0],item[1]});
        }
        // 将数组points里的元素先按横坐标x升序排序,纵坐标y降序排序
        sort(v.begin(),v.end(),cmp);
        int n=v.size();
        // 答案
        int ans=0;
        // 第一层for循环枚举左上角的点
        for(int i=0;i<n;i++){
        	// 右下角的点不能低于mx,否则会覆盖之前的点
            int mx=INT_MIN;
            // 第二层for循环枚举右下角的点
            for(int j=i+1;j<n;j++){
                if(v[i].first<=v[j].first && v[i].second>=v[j].second && v[j].second>mx){
                    ans++;
                    mx=v[j].second;
                } 
            }
        }
        return ans;

    }
};

JAVA版本:

class Solution {
    public int numberOfPairs(int[][] points) {
        Arrays.sort(points,(a,b) -> a[0]!=b[0] ? a[0]-b[0]:b[1]-a[1] );
        int ans=0;
        int n=points.length;
        for(int i=0;i<n;i++){
            int mx=Integer.MIN_VALUE;
            for(int j=i+1;j<n;j++){
                if(points[i][1]>=points[j][1]&&points[j][1]>mx){
                    ans++;
                    mx=points[j][1];
                }
            }
        }
        return ans;
    }
}

GO版本:

func numberOfPairs(points [][]int) int {
    slices.SortFunc(points,func(a,b []int)int{
        return cmp.Or(a[0]-b[0],b[1]-a[1])
    })
    ans:=0
    n:=len(points)
    for i:=0;i<n;i++ {
        mx:=math.MinInt
        for j:=i+1;j<n;j++ {
            if points[i][1]>=points[j][1] && points[j][1]>mx {
                ans++
                mx=points[j][1]
            }
        }
    }
    return ans
}

网站公告

今日签到

点亮在社区的每一天
去签到