考研群里有个老哥刷到了一道题。20分钟搞定。。
代码里面的注释为几种测试数据,完全没问题。
题目:
设计一个算法,时间复杂度为O(n),空间复杂度为O(1),删除线性表中所有为key的元素。
第一行是输入的数组
第二行是删除的数
第三行是删除后的数组
#include <iostream>
using namespace std;
int arr[5];
//1 2 3 4 5
//1 2 2 4 5
//1 2 3 2 6
//2 2 2 2 2
//1 8 3 4 5
int n = 5;
void del_all_keys(int key) {
int del = -1;
int flag = 0;
int nn=n;
for (int i = 0; i < n;++i) {
if (arr[i] == key) {
if (flag==0) {
del = i;
}
++flag;
nn--;
}else if (flag) {
arr[del] = arr[i];
++del;
}
}
n = nn;
for (int i = 0; i < n; ++i) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int key;
while (1) {
n = 5;
for (int i = 0; i < 5; ++i) {
cin >> arr[i];
}
cin >> key;
del_all_keys(key);
cout << endl;
cout << endl;
}
return 0;
}