Leetcode 3623. Count Number of Trapezoids I

1. 解题思路

这一题思路上就是一个分块加累积数组即可。

我们首先统计一下每一个y值上有多少个点,那么在对应的位置上即可有 C n 2 C_n^2 Cn2种边的选取方式。然后,我们从小到大依次考察每一条边作为上边的情况,此时其能够取到的梯形的个数就恰好是对应位置上所有的边的选取方式乘上其下方所有边的可选方式。我们使用一个累积数组即可简化计算了。

2. 代码实现

给出python代码实现如下:

MOD = 10**9+7

class Solution:
    def countTrapezoids(self, points: List[List[int]]) -> int:
        groups = defaultdict(int)
        for x, y in points:
            groups[y] += 1
        ys = sorted(groups.keys())
        cnt = [(groups[y]*(groups[y]-1)//2) % MOD for y in ys]
        n = len(cnt)
        ans, s = 0, 0
        for i in range(n):
            ans = (ans + cnt[i] * s) % MOD
            s += cnt[i]
        return ans

提交代码评测得到:耗时128ms,占用内存63.46MB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值