在这段代码中,我试图从数组中删除指定值的所有匹配项。函数应该有三个参数,数组,数组长度和正在搜索的值。每次找到该值时,都应该移动数组以移除该值。删除数组中迭代的问题
这是我到目前为止有:
void arrayShift(int arr[], int length, int value){
for(int i = 0; i<length; i++)
{
if(arr[i] == value)
{
for (int k = i; k<length ; k++)
{
arr[k] = arr[k+1];
}
arr[length-1] = 0;
}
}
}
的代码是成功的,当这些是使用的值:
int inputarray[] = {10,20,30,40,50,10};
int length = 6;
int value = 10;
//output: 20 30 40 50
int inputarray[] = {6, 7, 8, 9};
int length = 4;
int value = 6;
//ouput: 7 8 9
int inputarray[] = {10,20,30,40,50,60};
int length = 6;
int value = 70;
//output: 10 20 30 40 50 60
但是,代码不工作时:
int inputarray[] = {9,8,9,9,9,9,6};
int length = 7;
int value = 9;
//what I get: 8 9
//what I want: 8 6
我似乎无法弄清楚为什么我的代码在迭代播放时失败。
http://en.cppreference.com/w/cpp/algorithm/remove – 2015-03-13 12:10:27
在每个迭代中(可能)移动整个(尾部)数组会导致程序的平方时间复杂度O(n^2)。看到我的答案是线性时间方法。 – CiaPan 2015-03-13 13:11:07