部分选择排序与合并排序查找“数组中最大的 k”

2023-12-31

我想知道我的思路是否正确。

我正在准备面试(作为一名大学生),我遇到的问题之一是找到数组中最大的 K 个数字。

我的第一个想法是只使用部分选择排序(例如,从第一个元素扫描数组,并为看到的最低元素及其索引保留两个变量,并与数组末尾的该索引交换,并继续这样做,直到我们'交换了 K 个元素并返回该数组中前 K 个元素的副本)。 然而,这需要O(K*n)时间。如果我简单地使用像 Mergesort 这样的高效排序方法对数组进行排序,那么只需要O(n*log(n))是时候对整个数组进行排序并返回 K 个最大的数字了。

在面试期间讨论这两种方法是否足够好(比较输入的 log(n) 和 K 并使用两者中较小的一个来计算 K 最大),或者可以安全地假设我应该给出这个问题的 O(n) 解决方案?


存在一个O(n)寻找第 k 个最小元素的算法 http://en.wikipedia.org/wiki/Median_of_medians,一旦获得该元素,您就可以简单地扫描列表并收集适当的元素。它基于快速排序,但其工作原理背后的原因相当复杂......还有一个更简单的变体:probably将运行在O(n). 我对另一个问题的回答 https://stackoverflow.com/questions/6072319/finding-n-th-smallest-element-in-an-array/6072432#6072432包含对此的简短讨论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

部分选择排序与合并排序查找“数组中最大的 k” 的相关文章

  • 使 TreeMap 比较器容忍 null

    这个定制的 Valuecomarator 按其值对 TreeMap 进行排序 但在搜索 TreeMap 是否具有某个键时 它不能容忍 nullpointException 如何修改比较器来处理零点 import java io IOExce
  • Python求矩阵动态规划中最大的平方

    我有一个矩阵如下 Python matrix o o o oo o o o ooo o o oo o o oo 其中 o 是一个障碍 我需要找到这个矩阵中最大的正方形 并替换相应的 带有 x 如下所示 xxxo o o xxxoo xxxo
  • 归并排序究竟进行了多少次比较?

    我读到 在实践中 快速排序比合并排序快得多 其原因是隐藏常量 那么 随机快速排序复杂度的解是2nlnn 1 39nlogn 这意味着快速排序中的常数是1 39 但是合并排序呢 归并排序中的常数是什么 让我们看看能否解决这个问题 在合并排序中
  • 使用 Active Record 信誉系统 gem,当我按投票排序时不会发生排序

    遵循 RailsCast 的信誉系统 gem 我将以下代码添加到我的 microposts controller 中 def index microposts Micropost paginate page params page find
  • 使用按键重新排列字符串

    我想使用Pythonrandomly根据给定的键重新排列字符串的各个部分 我还想用相同的密钥恢复原始字符串 def rearrange key data pass def restore key rearranged data pass 效
  • 良好的线性代数包[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在为一个项目实现一些谱图算法 其中很大一部分是查找大型稀疏矩阵以及乘法矩阵的特征值和特征向量 我的问
  • Perl:散列 2 中数组的数值排序(施瓦茨变换)

    这实际上是该线程的后续内容 Perl 散列中数组的数字排序 https stackoverflow com questions 7914931 perl numerical sort of arrays in a hash 我无法编辑原始问
  • 找到经过大多数点的直线的最有效算法是什么?

    问题 N 个点在二维平面上给出 同一个点上最多有多少个点straight line The problem has O N2 solution go through each point and find the number of poi
  • 二指针算法

    我想了解两指针算法方法 所以我一直在阅读本文 https tp iiita quora com The Two Pointer Algorithm 所以这是问题 假设我们有一个包含 N 个元素的数组 我们想要找到该数组中最大的连续元素序列
  • 数独生成器算法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我制作了一个生成数独的算法 但效率非常低 每个谜题都需要几分钟才能生成 所以现在我正在尝试以最佳方式重新编写它 但我遇到了一些问题 需
  • 在数组中出现超过 n/3 次的数字

    我读过这个问题查找数组中最常见的条目 https stackoverflow com questions 278488 puzzle find the most common entry in an array 乔恩 斯基特的回答真是令人兴
  • 计算字母表的第 n 个 6 个字符排列

    我已经研究了好几天 试图找到解决这个问题的方法 如果需要的话 我很乐意花钱请人咨询时间来解决这个问题 我目前正在使用Python迭代工具 http docs python org 2 library itertools html生成 32
  • GO中的优先级队列

    谁能向我解释一下 我想在GO中实现一个优先级队列 接口实现来自link https golang org pkg container heap example priorityQueue 但优先级最低 我的代码 pq make Priori
  • java中的散列是如何工作的?

    我正在尝试弄清楚java中的哈希值 例如 如果我想在哈希图中存储一些数据 它是否会有某种带有哈希值的底层哈希表 或者 如果有人能够对哈希的工作原理给出一个很好且简单的解释 我将非常感激 HashMap 基本上在内部实现为数组Entry 如果
  • 快速排序优化

    我正在学习排序算法 下一步 我试图让我的实现接近std sort 到目前为止我还很远 我有 3 个快速排序的实现 标准快速排序 使用临时数组 quicksort with following optimizations median3 用于
  • 动态前缀和

    是否有任何数据结构能够返回数组的前缀和 1 更新元素以及向数组插入 删除元素 所有这些都在 O log n 内 1 前缀和 是从第一个元素到给定索引的所有元素的总和 例如 给定非负整数数组8 1 10 7前三个元素的前缀和是19 8 1 1
  • 获取大于某个数字的元素个数

    我正在尝试解决以下问题 数字被插入到容器中 每次插入数字时 我需要知道容器中有多少元素大于或等于当前插入的数字 我相信这两个操作都可以以对数复杂度完成 我的问题 C 库中有标准容器可以解决这个问题吗 我知道std multiset可以在对数
  • 按 ListProperty (NDB) 对查询进行排序

    如何按 ListProperty 对查询进行排序 该模型 class Chapter ndb Model title ndb StringProperty required True version ndb IntegerProperty
  • 如何解决素数函数的大O表示法?

    我正在尝试理解 Big O 表示法 很抱歉 如果我问的问题太明显了 但我似乎无法理解这一点 我有以下 C 代码函数 我正在尝试为其计算 Big O 表示法 for i 2 i lt 100 i for j 2 j lt i j j if i
  • 如何在python中访问矩阵每个元素的相邻单元格?

    这里 如果两个单元共享边界 则它们被认为是相邻的 例如 A 5 6 4 2 1 3 7 9 8 这里 索引 0 0 的相邻元素位于索引 0 1 和 1 0 处 索引 1 1 的相邻元素位于索引 0 1 1 0 2 1 处 和 1 2 假设你

随机推荐

  • 使用默认参数作为模板类型的函数

    我正在尝试使用带有默认参数的函数作为函数指针模板参数 template
  • 如何使用 ASP.Net 将 Rtf 转换为文本?

    如何使用 ASP Net 将 RTF 转换为文本格式 您有关于MSDN http msdn microsoft com en us library cc488002 aspx In C class ConvertFromRTF static
  • 使用 OAuth 保护我的 REST API,同时仍然允许通过第三方 OAuth 提供商进行身份验证(使用 DotNetOpenAuth)

    我有一个带有简单 REST API 的产品 以便该产品的用户可以直接集成该产品的功能 而无需使用我的 Web 用户界面 最近 各个第三方都对我感兴趣 希望将他们的桌面客户端与 API 集成 以允许我的产品的用户使用该第三方应用程序访问他们的
  • 如何在处理多个文件时组织 Vim 缓冲区、窗口和选项卡

    我一生都在使用 VIM 但最近我有点厌倦了它 因为在一个大项目 有 500k LOC 和数百个文件 中同时处理 20 个左右的文件时 我迷失在缓冲区 窗口和选项卡中 每当我这样做 make grep等等 新的缓冲区在当前窗口中跳出 标签也会
  • 使用 JobStoreTX 配置 CronTriggerFactoryBean 以实现quartz集群

    我们使用的是 Quartz 2 1 5 我们设置了以下属性 org quartz jobStore class org quartz impl jdbcjobstore JobStoreTX org quartz jobStore driv
  • 当(当前)只有一个类实现接口时,您是否应该创建一个接口?

    如果有可能有其他东西可以使用它 您是否应该始终创建一个接口 或者等到实际需要它然后重构以使用接口 对接口进行编程通常看起来是合理的建议 但 YAGNI 我想也许这要视情况而定 现在我有一个代表可以包含食谱或其他文件夹的文件夹的对象 我不应该
  • ARM NEON SIMD 版本 2

    Cortex A15 中的 NEON SIMD 和 NEON SIMD 版本 2 有什么区别 它添加了 SIMD FMA 指令 VFMA F32 并且还强制要求 NEON 半精度扩展 ARM Cortex A7 ARM Cortex A15
  • HTTPS nonProxyHosts 的 JVM 参数

    所以我有一个相当加载的环境变量 JAVA OPTIONS export JAVA OPTIONS Dhttp proxyHost my proxy com Dhttp proxyPort 1080 Dhttps proxyHost my p
  • Python Eve:请求的资源上不存在“Access-Control-Allow-Origin”标头

    我使用Python EVE框架编写了一个API 当尝试从 AngularJS 应用程序访问 API 时 它显示错误 如下所示 XMLHttpRequest cannot load http 127 0 0 1 5000 user jay3d
  • 创建未知大小的稀疏矩阵

    例如 我有一个文本文件 其中每一行都指示图形上的一条边 2 5 1 表示节点 2 和 5 之间权重为 1 的边 我想使用这些元组创建一个稀疏邻接矩阵 通常 我会将稀疏矩阵初始化为 G scipy sparse lil matrix n n
  • const char* 的奇怪 std::cout 行为

    我有一个方法返回一个字符串以显示为错误消息 根据程序中发生此错误的位置 我可能会在显示错误消息之前添加更多解释 string errorMessage return this is an error somewhere in the pro
  • 在 Java 面板中包含命令提示符

    我有一个批处理文件 可以从 SVN 中检出代码并对其调用几个命令 这发生在 Windows 命令提示符上 我想从我的 java 程序调用这个批处理文件 并且命令提示符必须出现在我的应用程序窗口的控制台中 而不是作为单独的窗口 这样我就可以从
  • 如何在图像周围添加图像边框?

    有没有简单的方法可以在图像周围添加图像边框 原因是我想在图像周围创建阴影效果 图像作为缩略图加载 大小为 110x75 像素 我正在考虑创建阴影边框 但不知道如何将其添加到图像周围 有人知道方法吗 最好是PHP 您可以使用 GD 库或 Im
  • 我的应用程序中的 ic_launcher 图标错误

    我正在开发一个应用程序Honeycomb并遇到了这个非常奇怪的问题 我更改了应用程序图标 ic launcher 在每一个drawable文件夹并确保它在清单中正确 但我有一个标准 settings 启动器中的图标 在应用程序本身中是正确的
  • SVG 圆中 dasharray 属性的奇怪行为

    我正在尝试创建 SVG 圆的无限动画循环 我想创建 12 个相等的块 并将它们分开一些间隙 为了计算我使用的圆片的价值k系数见下表 所以我做了 0 25782 160 我的圆的直径 我得到 41 2512 它应该是我的棋子的值 之后我创建了
  • 获取正在运行的进程的维度

    我正在尝试抓取应用程序中特定 x y 位置的屏幕截图 有没有办法在 Process 对象中获取正在运行的应用程序 然后获取它的尺寸 就像是 Process processlist Process GetProcesses foreach P
  • 验证错误:值无效

    我的 p selectOneMenu 有问题 无论我做什么 我都无法让 JSF 调用 JPA 实体上的 setter JSF 验证失败并显示以下消息 形式 位置 验证错误 值无效 我在同一类型的其他几个类 即连接表类 上进行了此工作 但我一
  • 无法使用 Espresso 将文本添加到 webview 文本字段

    我正在尝试将文本添加到 Esprsso 中的文本字段 在 Web 视图内 但收到此错误 引起原因 java lang RuntimeException 评估错误评估 状态 13 值 message 无法设置选择结束 hasMessage 真
  • Java 中的动态绑定==后期绑定吗?

    在不同的来源中 我读到了有关该主题的不同内容 例如维基百科说 后期绑定经常与动态调度混淆 但两者之间存在显着差异 但几行之后 在 Java 编程中 流行使用术语 后期绑定 作为动态分派的同义词 具体来说 这是指与虚拟方法一起使用的 Java
  • 部分选择排序与合并排序查找“数组中最大的 k”

    我想知道我的思路是否正确 我正在准备面试 作为一名大学生 我遇到的问题之一是找到数组中最大的 K 个数字 我的第一个想法是只使用部分选择排序 例如 从第一个元素扫描数组 并为看到的最低元素及其索引保留两个变量 并与数组末尾的该索引交换 并继