前言:
今天兄弟们对“c向下取整数”大概比较注意,看官们都想要分析一些“c向下取整数”的相关资讯。那么小编也在网摘上收集了一些关于“c向下取整数””的相关知识,希望咱们能喜欢,看官们一起来学习一下吧!题目
给你一个整数数组 nums ,请你返回所有下标对 0 <= i, j < nums.length 的 floor(nums[i] / nums[j]) 结果之和。
由于答案可能会很大,请你返回答案对109 + 7 取余 的结果。
函数 floor() 返回输入数字的整数部分。
示例 1:输入:nums = [2,5,9] 输出:10
解释:floor(2 / 5) = floor(2 / 9) = floor(5 / 9) = 0
floor(2 / 2) = floor(5 / 5) = floor(9 / 9) = 1
floor(5 / 2) = 2
floor(9 / 2) = 4
floor(9 / 5) = 1
我们计算每一个数对商向下取整的结果并求和得到 10 。
示例 2:输入:nums = [7,7,7,7,7,7,7] 输出:49
提示:1 <= nums.length <= 105
1 <= nums[i] <= 105
解题思路分析
1、前缀和;时间复杂度O(n^3/2),空间复杂度O(n)
func sumOfFlooredPairs(nums []int) int { n := len(nums) count := make([]int, 200001) for i := 0; i < n; i++ { count[nums[i]]++ } arr := make([]int, 200001+1) // 前缀和 for i := 0; i < len(count); i++ { arr[i+1] = arr[i] + count[i] } res := 0 // a/b = c for i := 0; i < len(count); i++ { // 枚举b if count[i] > 0 { // i个数大于0 for j := 1; i*j <= 100000; j++ { // 枚举c // b的个数 X c X 目标范围内的数字个数 total := count[i] * j * (arr[i*(j+1)] - arr[i*j]) res = (res + total) % 1000000007 } } } return res}总结
Hard题目,借助前缀和,然后枚举被除数,枚举商即可
标签: #c向下取整数 #c语言中向下取整表示