在 Python 中查找元素平方在给定范围内的对数的程序
假设我们有两个数字列表nums1和nums2。并且还有两个数字下限和上限。我们必须找到对(i,j)的数量,使得lower≤nums1[i]^2+nums2[j]^2≤upper。
因此,如果输入类似于nums1=[5,3,2]nums2=[8,12,6]lower=10upper=50,那么输出将为2,因为这些对类似于(1,2)和(2、2)
10<=3^2+6^2<<50=10<=45<<50
10<=2^2+6^2<<50=10<=40<<50
示例
让我们看看以下实现以获得更好的理解-
from bisect import bisect_left, bisect_right
def solve(nums1, nums2, lower, upper):
nums1 = [i * i for i in nums1]
nums2 = [i * i for i in nums2]
n, m = len(nums1), len(nums2)
if n > m:
nums1, nums2 = nums2, nums1
n, m = m, n
nums2 = sorted(nums2)
res = 0
for e1 in nums1:
st = bisect_left(nums2, lower - e1)
en = bisect_right(nums2, upper - e1)
count = en - st
res += count
return res
nums1 = [5, 3, 2]
nums2 = [8, 12, 6]
lower = 10
upper = 50
print(solve(nums1, nums2, lower, upper))输入
[5, 3, 2], [8, 12, 6], 10, 50输出结果
2
热门推荐
10 香港老妈结婚祝福语简短
11 毕业立体贺卡祝福语简短
12 简短新年年会祝福语
13 评论小品祝福语大全简短
14 恭喜师兄结婚祝福语简短
15 员工集体辞职祝福语简短
16 高中新生祝福语 简短
17 装修祝福语男生搞笑简短
18 生日开业蛋糕祝福语简短