对这些 n^2 个数字进行排序的最快方法是什么
What is the fastest way to sort these n^2 numbers?
给定一个数字'n',我想返回一个包含k1*k2的所有值的n^2数字的排序数组,其中k1和k2的范围可以从1到n。
例如,对于 n=2,它将返回:{1,2,2,4}。(数量基本上是1*1,1*2,2*1,2*2(。
对于 n=3,它将返回:{1,2,2,3,3,4,6,6,9}。
(数字为:
1*1、2*1、1*2、2*2、3*1、1*3、3*2、2*3、3*3(我尝试使用c ++标准库中的排序函数进行过,但我想知道是否可以进一步优化它。
好吧,首先,您获得n^2
条目,其中最大的条目将是 n^2
,并且在可能的值范围内,只有少量值用于大n
。因此,我建议采用计数方法:
- 用零初始化大小
n^2
的数组counts[]
。 - 循环访问
values[]
的值数组,并执行counts[values[i]-1]++
。 - 通过遍历
counts
数组来重新初始化values
数组,将尽可能多的i+1
值拖放到values
数组中,counts[i]
给出的值。
就这样。它O(n^2)
,所以你很难找到一个性能更高的解决方案。
vector<int> count(n*n+1);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
++count[i*j];
for (int i = 1; i <= n*n; ++i)
for (int j = 0; j < count[i]; ++j)
cout << i << " ";
这本质上是 cmaster 答案中描述的 O(n*n( 解决方案。
相关文章:
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 在 C++20 中对概念约束函数进行排序的规则是什么?
- 此气泡排序代码中的错误是什么?
- 在 C++ 中,以相反顺序排序的最快方法是什么?
- 使用c 中的sort()函数对字符串进行排序的最坏情况是什么是什么
- 随机化超大文件内容排序的有效方法是什么?
- 对这些 n^2 个数字进行排序的最快方法是什么
- 当有多个查询时,检查某些子数组是否排序的有效方法是什么?
- 从排序的数字数组中返回数字范围的最快方法是什么?
- 根据这些字符串输入在句子中的位置对这些字符串输入进行排序的更快方法是什么
- 根据特定数据对字符串进行排序的最佳方法是什么
- 交替对数组进行排序的最简单方法是什么(例如:T,T,F 到 T,F,T,T,T,T,F,T,F,F,T,T,
- 仅使用几乎相等的标准(无排序)从容器中删除重复项的最有效方法是什么
- 排序是什么意思
- 用sqlite和c++对数据库表进行排序的最佳方法是什么
- 对向量进行排序的最快方法是什么
- 对一组数字进行排序的最快数据结构(和排序算法)是什么
- 调用函数中的这些评估是什么,这些评估未在被调用函数的主体之前专门排序
- 在c++中,对某种列表进行排序的最快方法是什么
- 选择排序算法的标准是什么