algorithm - 查找包含来自总体 A 的最大元素和来自总体 B 的零元素的标量区间
问题描述
给定两个大集合 A 和 B 的标量(浮点)值,您将使用什么算法来找到包含 B 中的零个元素和 A 中的最大元素数的(标量)范围 [x0,x1]?
排序复杂度 (O(n log n)) 是不可避免的吗?
解决方案
创建一个包含所有值的单个列表,其中每个值都标记有两个计数:一个与集合 A 相关的计数,另一个与集合 B 相关的计数。最初,当值来自集合 A 时,这些计数是 1 和 0,并且当值来自集合 B 时为 0 和 1。因此此列表中的条目可以是元组(值、计数 A、计数 B)。这个操作是 O(n)。
对这些元组进行排序。O(nlogn)
将具有重复值的元组合并为一个元组,并将值累加到相应的计数器中,这样元组就可以告诉我们该值在集合 A 中出现了多少次,在集合 B 中出现了多少次。 O(n)
按排序顺序遍历此列表,并保持一系列相邻元组的 countA 的最大计数总和,其中 countB 始终为 0,以及该范围的最小值和最大值。在)
排序是时间复杂度的决定因素:O(nlogn)。
推荐阅读
- javascript - 将 WebSocket 与两个 Web 浏览器实例区分开来
- c# - 将字符串值存储在数组中,然后显示数组值
- android - 是否可以在不安装 Google Play 游戏应用程序的情况下使用 Android 排行榜?
- reactjs - React 上下文 API 不会将新状态值传递给所有 Consumer props
- php - 警告:ZipArchive::close():创建临时文件失败:权限被拒绝
- c# - HttpClient 和 MultipartFormDataContent = 上传文件和字符串
- angular - Angular:为什么颜色 CSS 属性设置会向下传播到嵌套组件?
- vue.js - 单页应用程序路由
- java - AWT:我正在尝试学习 Java,但无法理解以下程序
- cordova - IONIC 4 无法安装 cordova-plugin-connectsdk