algorithm - 查找整数是否存在于范围列表中
问题描述
给定一个包含 1,000,000 个唯一整数的数组 N,范围从 0 到 1,999,999。过滤掉 M 内任何范围内不存在的整数的最快方法是什么 - 其中 M 是 10 个随机范围的固定组,每个范围的整数范围为 0 到 1,999,999?
数字较小的短样本:
给定这组 N 个唯一整数:[1,5,7,8,20,22,30] 和这组 M 个范围:[(1,6) , (19,21), (23,50)]
找出在 M 的任何范围内存在的 N 值(包括边界)
解决方案:[1,5,20,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)
推荐阅读
- nlp - 如何找到 spaCy 模型的词汇量?
- if-statement - IF 函数当 true 发送另一个单元格的值
- flutter - 如何在颤动的几个类之间使用提供者?
- jquery - jQuery Ajax 不会继续处理任何回调 .done、.fail、.always - 为什么?
- machine-learning - keras 神经网络为每个手写数字预测相同的数字
- javascript - 如何检查内容的长度?
- aws-lambda - AWS Lambda 无缘无故返回内部服务器错误
- flutter - Flutter 权限处理程序无法正常工作
- node.js - 你如何解析一个标记为零的nodejs条目?
- javascript - JavaFX Webview:Javascript Bridge 在第二个页面加载时延迟