删除数组中重复的数字
问题:一个动态长度可变的数字序列,以数字0为结束标志,要求将重复的数字用一个数字代替,例如:
将数组 1,1,1,2,2,2,2,2,7,7,1,5,5,5,0 转变成1,2,7,1,5,0
问题比较简单,要注意的是这个数组是动态的。所以避免麻烦我还是用了STL的vector。
#include <iostream> #include <vector> using namespace std; //remove the duplicated numbers in an intger array, the array was end with 0; //e.g. 1,1,1,2,2,5,4,4,4,4,1,0 --->1,2,5,4,1,0 void static remove_duplicated(int a[], vector<int>& _st) { _st.push_back(a[0]); for(int i=1;_st[_st.size()-1]!=0;i++) { if(a[i-1]!=a[i]) _st.push_back(a[i]); } }
当然如果可以改变原来的数组的话,可以不用STL,仅需要指针操作就可以了。下面这个程序将修改原来数组的内容。
void static remove_duplicated2(int a[]) { if(a[0]==0 || a==NULL) return; int insert=1,current=1; while(a[current]!=0) { if(a[current]!=a[current-1]) { a[insert]=a[current]; insert++; current++; } else current++; } a[insert]=0; }