Leetcode5212. 向下取整数对和(前缀和+枚举)

Posted !0 !

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode5212. 向下取整数对和(前缀和+枚举)相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode-cn.com/problems/sum-of-floored-pairs/

解题思路

我们可以枚举每个数的倍数区间的个数乘以每个数出现的次数,最后相加就是最终结果。具体思路看代码。

代码

class Solution {
    public int sumOfFlooredPairs(int[] nums) {
        int N = 100010;
        int MOD = 1000000007;
        int[] s = new int[N];   //记录每个数出现多少次
        for (int x : nums) //记录每个数出现多少次
            s[x] ++ ;
        for (int i = 1; i < N; i++)  //前缀和
            s[i] += s[i - 1];
        long res = 0;
        for (int i = 1; i < N; i++)
            for (int j = 1; j * i < N; j ++ ) {
                int l = j * i, r = Math.min(N - 1, (j + 1) * i - 1);
                int sum = (s[r] - s[l - 1]) * j % MOD;
                res = (res + (long)sum * (s[i] - s[i - 1])) % (long)MOD;
            }
        return (int)res;
    }
}

复杂度分析

  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(n)

以上是关于Leetcode5212. 向下取整数对和(前缀和+枚举)的主要内容,如果未能解决你的问题,请参考以下文章

js 向上和向下取整

JavaScript向上取整向下取整和四舍五入等

LeetCode 1877 数组中最大数对和的最小值[排序] HERODING的LeetCode之路

双周赛 52,单周赛 241 题解

js 向上取整向下取整四舍五入

LeetCode | 二分查找