- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在追求 Algorithms, Part I Coursera 上的类(class),其中一个面试题(未评分)如下:
Decimal dominants. Given an array with n keys, design an algorithm to find all values that occur more than n/10 times. The expected running time of your algorithm should be linear.
它有一个提示:
determine the (n/10)th largest key using quickselect and check if it occurs more than n/10 times.
我不明白 n/10 最大键与 n/10 重复值有什么关系。它不会告诉我哪些值出现超过 n/10 次。
有一个 paper这为 n/k 找到了更通用的解决方案,但我很难理解论文中的代码。
解决它的一种方法是对输入数组进行排序,然后进行另一遍计算每个不同值的出现次数。这将花费 O(nlogn) + O(n) 时间,这比问题要求的要多。
想法?
最佳答案
使用 QuickSelect 查找第 n/10 大键(即,如果数组已排序,则位于位置 n/10 的键)需要线性时间。如果此键的副本少于 n/10,那么您知道按排序顺序在其上方的任何内容都没有 n/10 个副本,因为在排序中没有空间容纳该键上方的任何内容的 n/10 个副本命令。如果有 n/10 或更多副本,那么你已经找到了发生超过 n/10 次的东西,并且再次没有比它更大的东西出现超过 n/10 次,因为没有空间
现在你有一个最多 9n/10 个值的数组,比你刚刚从 QuickSelect 中找到的键小。使用另一遍 QuickSelect 从这个左侧数组的顶部找到键 n/10。和以前一样,您可能会发现一个键出现 n/10 次或更多次,并且无论您是否这样做,您都会从数组中删除至少 n/10 个条目。
因此您可以使用 10 次 QuickSelect 调用来搜索整个数组,每次调用都花费线性时间。 10是问题定义中固定的一个数字,所以整个操作只算线性时间。
关于arrays - 如何找到数组中出现次数超过 n/k 次的所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50558730/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!