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. 向下取整数对和(前缀和+枚举)的主要内容,如果未能解决你的问题,请参考以下文章