问题描述
给定一个包含 1,000,000 个从 0 到 1,999,999 的唯一整数的数组 N。过滤掉不存在于 M 内任何范围内的整数的最快方法是什么 - 其中 M 是一组固定的 10 个随机范围,每个范围的整数范围为 0 到 1,999?
数字较小的短样本:
给定这组 N 个唯一整数:[1,5,7,8,20,22,30] 和这组 M 范围: [(1,6),(19,21),(23,50)]
找出在 M 的任何范围(包含边界)内存在哪些 N 值
解:[1,30]
Java 是首选(运行时间/复杂性测试),但任何其他语言都可以
解决方法
使用python3。希望这对您有帮助
import numpy as np
ranges = [(1,6),(19,21),(23,50)]
nums = [1,5,7,8,20,22,30]
max = ranges[-1][1]
ind_array = np.zeros(max)
for r in ranges:
ind_array[r[0]-1:r[1]] = 1
lst = []
for n in nums:
if ind_array[n-1] == 1:
lst.append(n)
print(lst)