合并输入中给出的范围。
输入:(0,1)(3,5),(4,8),(10,12),(9,10)
输出:(0,1),(3,8),(9,12)
代码:
第1步:排序(输入) - nlogn
创建一个数组,其长度是排序后的最后一个数字。在上面的例子中,它是12。
第2步:
int tupleCounter = 0;
for(Tuple tuple : tuples){
for(int i=tuple.first; i<=tuple.second; i++){
if(period[i] != -1){
tupleCounter = period[i];
}
period[i] = tupleCounter;
}
tupleCounter ++;
}
上述块的输出:[0,0,-1,1,1,1,1,1,1,2,2,2,2]
第3步:拆分它们并显示输出。
如何计算第2步的时间复杂度?外循环按照输入的大小运行,它是N,内循环基于每个部分中的值运行,最终是数组的长度(m)。
因此步骤2的时间复杂度为O(n + m)。我是对的吗?