假设我们有如下的初始列表:
initial=[{"A",1}, {"A",2}, {"A",3}, {"B",5}, {"B",7}, {"C",6}, {"C",8}, {"D",4}]它是T的一个列表,我们有一个类似的实体;class T{ string Title; int Id;},最初的列表是按标题排序的,然后是Id,我们在开始时就知道了。
我想把这个列表混在一起,以便我们在最后有一个结果列表如下:
result=[{"A",1}, {"B",5}, {"C",6}, {"D",4}, {"A",2}, {"B",7}, {"C",8}, {"A",3}]初始列表中的子列表是:
{"A",1}, {"A",2}, {"A",3}
{"B",5}, {"B",7}
{"C",6}, {"C",8}
{"D",4}最初的问题可以是这样的:编写一个函数,其中包含按标题排序的T元素的列表,然后Id并返回一个新的T列表,它以一次从每个标题中抽取一个实体的方式混合T实体。函数应该围绕每个标题并在每个标题中放置一个T实体(从A到D的四舍五入),继续这样下去,直到所有的T实体都被放在结果列表中。
在O(N)中是否有一个解,其中N是给定列表的大小?
发布于 2022-04-18 09:44:01
首先,让我们计算一下每个标题在初始列表中出现多少次。当我们有一个等于最后一个元素的元素时,我们可以通过一次遍历元素并增加一个计数器,当我们到达一个新元素时,我们将计数器的当前值推到一个新列表中,并将计数器重置为1。
。
计算Count和Pref的第一个循环需要O(N)时间,其中N是数组中元素的总数。在接下来的步骤中,我们需要对一个元素进行迭代并复制它的总次数是N次,因为pref的每个元素都将被处理和复制一个等于其值的时间,值的总和是N--元素的初始总数。因此,整个算法的运行时间为O(N)。
https://stackoverflow.com/questions/71909351
复制相似问题