描述
利用顺序表表示一个包括n个整数的序列,请实现一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法可以删除表中所有值为item的元素。
输入
多组数据,每组数据有三行,第一行为顺序表的长度n,第二行为顺序表的n个元素(元素之间用空格分隔),第三行为待删除的元素的值item。当n=0时输入结束。
输出
对于每组数据分别输出一行,依次输出删除值为item的元素后顺序表中的剩余元素,元素之间用空格分隔。
输入样例 1
5
44 11 22 33 22
11
6
22 33 11 33 33 55
33
0
输出样例 1
44 22 33 22
22 11 55
思路:
让temp与输入的个数n相等,然后遍历vector,看看有几个元素与要删除的元素相等,有几个删几个~(temp剩下的值就是实际要输出的元素个数)不过temp在这里的作用是控制输出空格,输出空格的个数=temp-1。是否输出元素只要看遍历过程中的元素是不是和指定元素相等就可以了~
#include<string>
#include<iostream>
#include<map>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
//删除指定元素
int main()
{
int n, m;
cin >> n;
while (n != 0)
{
vector<int> v(n);
for (int i = 0; i < n; i++)
cin >> v[i];
cin >> m;
int j = 0,temp=n;
for(int i = 0; i < n; i++)
{
if (v[i] == m)
temp--;
}
for (int i = 0; i < n; i++)
{
if (v[i] != m)
{
cout << v[i];
j++;
if (j != temp)
cout << " ";
}
}
cout << endl;
cin >> n;
}
return 0;
}