查找范围列表中是否存在整数

问题描述

给定一个包含 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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...