Skip to content

Latest commit

 

History

History
56 lines (44 loc) · 1.54 KB

File metadata and controls

56 lines (44 loc) · 1.54 KB

1862. 向下取整数对和

给你一个整数数组 nums ,请你返回所有下标对 0 <= i, j < nums.lengthfloor(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

题解 (Python)

1. 题解

class Solution:
    def sumOfFlooredPairs(self, nums: List[int]) -> int:
        prevsum = 0
        ret = 0

        nums.sort()

        for j in range(len(nums)):
            if j > 0 and nums[j] == nums[j - 1]:
                ret = (ret + prevsum) % 1000000007
                continue

            i = bisect.bisect(nums, nums[j] - 1)
            prevsum = 0

            for x in range(1, nums[-1] // nums[j] + 1):
                k = bisect.bisect(nums, nums[j] * (x + 1) - 1, lo=i)
                prevsum = (prevsum + x * (k - i)) % 1000000007
                i = k

            ret = (ret + prevsum) % 1000000007

        return ret