leetcode 3623

3623: 统计梯形的数目Ⅰ

思路:组合数C(n,k) (即"n 选 k")

首先,统计每一行的点的个数,如果这一行有 c 个点,那么++从这 c 个点中选 2 个点++,有c*(c-1)/2种选法,可以组成一条水平边,即梯形的顶边或底边。

枚举每一行,设这一行有 k= c*(c-1)/2 条水平边,那么另外一条边就是++之前遍历过的++行的边数 s。根据乘法原理,之前遍历过的行与这一行,一共可以组成s⋅k 个水平梯形,加入答案。

复制代码
class Solution {
public:
    int countTrapezoids(vector<vector<int>>& points) {
        constexpr int MOD=1'000'000'007;
        unordered_map<int,int> cnt;
        for(auto& p :points) cnt[p[1]]++;  // 统计每一行(水平线)有多少个点

        long long ans=0,s=0; //之前遍历过的边数 s(不同行)
        for(auto& [y,c] :cnt){  
            long long k=(long long)c*(c-1)/2;  //同一行有几条水平边
            ans+=s*k%MOD;
            s+=k;
        }

        return ans%MOD;
    }
};
相关推荐
通信小呆呆6 小时前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
benben0446 小时前
强化学习之DQN算法族(基于gymnasium开发)
算法
何以解忧,唯有..7 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
想吃火锅10058 小时前
【leetcode】88.合并两个有序数组js
算法
生成论实验室9 小时前
机器人:一个自主运动的系统
人工智能·算法·语言模型·机器人·自动驾驶·agi·安全架构
Qres8219 小时前
算法复键——树状数组
数据结构·算法
H178535090969 小时前
SolidWorks第四部分_直接实体建模特征9_替换面原理
线性代数·算法·机器学习·3d建模·solidworks
不会就选b9 小时前
算法日常・每日刷题--<二分查找>3
算法
绿算技术10 小时前
Mooncake 与绿算ForinnBase GroundPool如何联手打破推理僵局?
科技·算法·架构