我必须创建一个采用一个目标数字的算法,创建一个该目标数字的数组,将该数组初始化为0,并以升序组织多个后续数字,但必须为O(N + K)复杂性。
我编写了代码以使其正常工作,它使用inFile获取目标编号,创建数组并将其初始化为0。然后,对于程序获得的每个输入编号,我都会增加数组中该元素的值用1表示。由于数组已经排序,它将按顺序显示所有值大于0的元素。我基于计数排序算法。但是,我认为我使用了太多的for循环,以使其复杂度为O(N + K)。我对复杂性的概念是全新的,所以不确定。
int target;
inFile >> target;
int add;
int numbers[target];
for (int i = 0; i < target; i++){
numbers[i] = 0;
}
while (inFile >> add) {
numbers[add] = numbers[add] + 1;
}
for (int i = 1; i < target; i++){
if(numbers[i] > 0){
for(int j = 1; j <= numbers[i]; j++)
outFile << i << " ";
}
}