C++ 在带有装运ID、UPC代码和数量的文本文件中查找最大数量的10行
这是一个面试问题 给定一个文本文件,每行包括:装运ID、UPC代码、数量 找出最大数量的10行 我的解决方案: 由c++ 制作一个最小堆(大小为10),数量作为比较对象 将每个条目作为一个结构读取,字段为{装运ID,UPC代码,数量} 将其与10元素最小堆的顶部元素进行比较 如果>用它替换顶部元素,否则读取下一个元素 它是O(n lgn) 空间O(1) 更好的解决方案C++ 在带有装运ID、UPC代码和数量的文本文件中查找最大数量的10行,c++,algorithm,sorting,heap,C++,Algorithm,Sorting,Heap,这是一个面试问题 给定一个文本文件,每行包括:装运ID、UPC代码、数量 找出最大数量的10行 我的解决方案: 由c++ 制作一个最小堆(大小为10),数量作为比较对象 将每个条目作为一个结构读取,字段为{装运ID,UPC代码,数量} 将其与10元素最小堆的顶部元素进行比较 如果>用它替换顶部元素,否则读取下一个元素 它是O(n lgn) 空间O(1) 更好的解决方案 谢谢旁注:您的时间成本实际上是O(n),因为每个元素的插入时间是一个常数(O(log10)) 基本思想是合理的——就成本而言,您
谢谢旁注:您的时间成本实际上是O(n),因为每个元素的插入时间是一个常数(O(log10))
基本思想是合理的——就成本而言,您不会比O(n)做得更好——但与其滚动自己的堆,不如使用
std::priority\u queue
旁注:您的时间成本实际上是O(n),因为每个元素的插入时间是一个常量(O(log10))
基本的想法是合理的——就成本而言,你不会比O(n)做得更好——但与其自己滚堆,不如使用
std::priority\u queue
@user1002288:我已经修改了我的答案。@user100228 O(n)是线性的。@jli:这是一个问题还是一个陈述?无论如何,OP可能在看到我修改后的答案之前写下了评论。根据编辑日志(),您的原始答案中确实包含了O(n)语句。@jli:编辑日志不会显示在原始帖子发布后五分钟内所做的更改。@user1002288:我已修改了我的答案。@user1002288 O(n)是线性的吗?@jli:这是问题还是陈述?无论如何,OP可能是在看到我修改后的答案之前写下了评论。根据编辑日志(),您的原始答案中确实包含了O(n)语句。@jli:编辑日志不会显示在原始帖子发布后五分钟内所做的更改。