- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问题描述:
Given a non-empty list of words, return the k most frequent elements.
Your answer should be sorted by frequency from highest to lowest. If two words have the same frequency, then the word with the lower alphabetical order comes first.
Eg: Example 1: Input: ["i", "love", "stackoverflow", "i", "love", "coding"], k = 2 Output: ["i", "love"] Explanation: "i" and "love" are the two most frequent words. Note that "i" comes before "love" due to a lower alphabetical order.
我使用频率桶的 Python 解决方案:
def topKFrequent(words, k):
wordCount = collections.Counter(words)
freq = [[] for i in range(len(words) + 1)]
res = []
for word, count in wordCount.items():
freq[count].append(word)
for i in range(len(freq) - 1, 0, -1):
if k == 0:
break
elif k >= len(freq[i]):
res.extend(sorted(freq[i]))
k -= len(freq[i])
else:
res.extend(sorted(freq[i])[:k])
break
return res
现在,我的论点是上面的运行时间为 O(nlogn),忽略了 Counter 初始化和 freq 初始化,它们都是 O(n),在最坏的情况下,最终循环将有一个桶其中的所有单词(每个单词只出现一次),所以我们最终只对该桶进行排序,即 nlog(n)。
以上的直觉分析是否正确?
最佳答案
是的,您的分析是正确的。如果您有 n
个单词,那么您的初始化步骤将在 O(n)
中运行。然后您的 for 循环对每个 j
分区执行 O(m log m)
排序。这是一个证明:
Let L be a list of n elements. Partition L into j different partitions, each containing n_1, ..., n_j elements. Clearly n_1 + ... + n_j = n and 1 <= j <= n.
We can ignore the iterations that do not process any items since they are bounded by a constant n operations. Thus the for loop does work on j iterations, and in each one does O(n_i log n_i) work. Thus, each of those iterations is bounded by C_i n_i log n_i for suitable constants C_i. The total work is then C_1 n_1 log n_1 + ... + C_j n_j log n_j. Suppose K is the largest of the C_i. Then this is bounded above by K n_1 log n + ... + K n_j log n = K (n_1 + ... + n_j) log n = K n log n. Therefore the loop runs in O(n log n) time.
我会注意到有一个 n log k
算法涉及使用最小堆,其中您最多保留 k
元素...
关于python - 'Top K most frequent elements' 的最差运行时复杂度分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53000122/
我一直盯着一本描述挖掘频繁项集的Apriori算法的书中的以下行,我似乎无法理解它 请注意,给定一个候选 k-itemset,我们只需要检查其 (k-1)-subsets 是否频繁,因为 Aprior
题目地址:https://leetcode.com/problems/most-frequent-subtree-sum/description/ 题目描述 Given the root of a
我正在将 OpenGL 应用程序从 win32 项目移植到 Qt 项目。 在 win32 项目中,我只是有一个主循环,它会在前一帧完成后立即执行下一帧。 在我找到的关于 Qt 和 OpenGL 的教程
我们有一个强大的 Postgres 服务器(64 核,384 GB RAM,16 个 15k SAS 驱动器,RAID 10),并且在一天中我们多次重建几个写入密集型的大型数据集。 Apache 和
我正在使用如下所示的 DataFrame: User_ID Datetime 01 2014-01-01 08:00:00 01 2014-01-02 09:00:00 02
我正在构建一个应该从有限任务池中为用户提取任务的应用程序。问题是我想要: 用户不会两次获得相同的任务, 在一段时间过去之前,用户不会获得与其 friend (在应用程序中)相同的任务。 总结一下我的问
如何在 SQL Server 的每一行中找到最频繁出现的值? 例子: 1 a d a a c a b --> a 2 b a c b b b d --> b 3 h a h h b c
正如您从上图中看到的那样,有一个像 toast “常用电子邮件”这样的东西。每当我完成输入电子邮件时,就会出现该 toast ,我认为我不是以编程方式制作的。似乎它只出现在 Android 10 上,
我正在构建一个自定义 Chrome 扩展程序。我的扩展偶尔会显示此消息。 这个扩展加载的太频繁了 这是什么意思?也许我超出了某个禁用扩展的阈值? 最佳答案 您已调用 chrome.runtime.re
我需要使用 AndroidViewClient 做一些自动化测试。在我的代码中,我使用了 ViewClient 的 dump()。但我通常会遇到以下错误: RuntimeError: The view
iPhone 的设置 -> 隐私 -> 位置服务 -> 系统服务 -> 常去地点,如果打开的话,可以存储一些关于设备的非常有趣的位置信息。自定义应用程序可以检索此信息吗?谢谢! 最佳答案 没有。常用位
问题描述: Given a non-empty list of words, return the k most frequent elements. Your answer should be so
我注意到 iPhone 上的“常用位置”似乎比监控 iOS 访问的应用程序 (https://developer.apple.com/reference/corelocation/clvisit) 使
我在 Azure 上有一个 VM 设置(运行 CentOS 的经典 VM)。我正在开发与 Azure VM 上托管的 RESTful API 连接的移动应用程序。我的移动应用程序性能很慢,在调查中,我
编辑:澄清问题 我想通过“标识符”聚合一个名为 df 的 pd.DataFrame 并对“成本”列求和。对于类别列,我想应用一个可以大声说出的聚合函数,例如“聚合并取列中最常见的值(众数),但如果众数
有没有一种简单的方法如何不仅可以找到最常用的术语,还可以在 R 的文本语料库中找到表达式(所以不止一个单词,单词组)? 使用 tm 包,我可以找到最常见的术语,如下所示: tdm <- TermDoc
如何获取核心数据中某个属性最常用的值? 假设我们的实体表是: -------------------------- | Name | Company | ---------------
我的网络应用程序需要始终查询二级连接。假设每个用户有 200 个 friend ,这些 friend 每个都有 200 个 friend 。我可以使用一些帮助来确定正确的数据库(和表结构),以使这个
我想找到所有的模式1) 一个字符串中出现频率最高的2) 至多有 d-错配。 对于这个给定的任务,我已经实现了一个函数来计算给定模式在具有 d-mismatches 的字符串中出现的次数。该算法的思想基
我正在尝试按照最常编写的模型的降序获取模型列表。到目前为止,这是我尝试过的。这个client 查询集提供了模型及其属性/属性的详细信息,以及这些模型相关的详细信息:实体计数、内置索引计数、内置索引大小
我是一名优秀的程序员,十分优秀!