|
|
1
6
我想我会这样做:
现在遍历所有数字。如果数字还不知道(在数据结构中),添加它,记住当前索引以及1作为计数。否则,增加计数。 现在,按照出现次数(减少)和出现次数索引(增加)对数据结构内容进行排序,并输出结果(使用出现次数重复数字)。 使用的处理空间<=N、 使用的时间取决于数据结构和字典可能大约为O(N logn) |
|
|
2
3
我可以想出两个解决办法: 进行第一次遍历以计算频率并存储第一个索引,然后根据该索引进行排序这很容易实现,在最坏的情况下使用线性(O(N))额外内存,并且需要O(N logn)时间。 每件事都要一次完成 priority queue ,其中“priority”是频率计数(当您通过输入时会发生变化)和第一次中断连接的索引
|
|
3
2
或 蟒蛇3.1
在 蟒蛇2.6
(奇怪的约束)
在每种情况下,keyfunc都用于控制排序的顺序
列表项根据keyfunc的返回值进行排序 |
|
4
1
但是-作为第一步,您应该使用一个std::map/对来存储数字,或者如果您事先被告知值的范围,那么使用一个简单的数组来执行2pass解决方案。 |
|
|
5
1
C#。它采用最明显的方法:按频率和顺序排序。
输出:
|
|
|
6
0
对数组排序,并在排序函数中为x,y:按计数(x)和计数(y)排序。如果它们相同,则按索引(x)和索引(y)排序 在python中: input = [5, 13, 6, 5, 13, 7, 8, 6, 5]
orig = list(input)
def cmp(x, y):
if (orig.count(y) - orig.count(x) != 0):
return orig.count(y) - orig.count(x)
return orig.index(x) - orig.index(y)
input.sort(cmp)
print input
为了提高效率,请在排序数组之前预先计算计数和索引。 |
|
7
0
|
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 2 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 2 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 2 年前 |