蓝桥杯 ALGO-79 删除数组0元素(水题、数组)

蓝桥杯 ALGO-79 删除数组零元素(水题、数组)

【思路】:1.数组移动。2.vector。

【AC代码】:数组移动。

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;

int CompactIntegers(int *p, int n)
{
	int i = 0, j = 0;
	for (i = 0; i < n; i++)
	{
		if (0 == p[i])
		{
			for (j = i+1; j < n; j++)
				p[j-1] = p[j];
			n--;
			i--;
		}
	}
	return n;
}

int main()
{
	//freopen("in.txt", "r", stdin);
	int n = 0, i = 0;
	cin >> n;
	int *p = (int*)malloc(n*sizeof(int));
	for (i = 0; i < n; i++)
		cin >> p[i];
	int len = CompactIntegers(p, n);
	cout << len << endl;
	for (i = 0; i < len; i++)
		cout << p[i] << " ";
}


【AC代码】:vector。iterator失效见STL那个文章。

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;

int main()
{
	//freopen("in.txt", "r", stdin);
	int n = 0, i = 0;
	cin >> n;
	vector<int> a(n);
	vector<int> :: iterator Iter;
	
	//input
	for (i = 0; i < n; i++)
		cin >> a[i];
		
	//delete
	for (Iter=a.begin(); Iter != a.end(); )
	{
		if ((*Iter) == 0)
			a.erase(Iter);
		else
			Iter++;
	}
	
	//output
	cout << a.size() << endl;
	for (Iter=a.begin(); Iter != a.end(); Iter++)
	{
		cout << (*Iter) << " ";
	}
}