C++|算法12(删除数组中的重复元素)

题目分析 有几种情况,如下:
1、有序数组,不能额外申请空间
2、无序数组,不能额外申请空间
3、无序数组,可以额外申请空间
算法分析 1、有序数组,不能额外申请空间
遍历一遍数组,并设置一个计数器,当前后遍历的数不相同是,计数器加1,并将计数器所在数组的位置等于当前遍历的值。
2、无序数组,不能额外申请空间
由于不能额外申请空间,需要先对数组进行快速排序
3、无序数组,可以额外申请空间
1)可以创建一个hash_map,遍历数组,采用find来过滤重复元素
2)可以使用STL的vector,采用erase和unique来删除重复元素
c++代码 1、有序数组,不能额外申请空间

//在不额外申请内存的前提下,删除重复元素 //sortBuffer:有序数组 //length: 有序数组长度 //newLength:无重复数组长度 bool RemoveDuplicates(int* sortBuffer,int length,int& newLength) { if(sortBuffer == NULL || length == 0) { return false; }int count = 1; for(int i = 1; i < length; i++) { if(sortBuffer[i] == sortBuffer[i-1]) { continue; } else { sortBuffer[count]=sortBuffer[i]; count++; } }newLength = count; return true; }

2、无序数组,不能额外申请空间
先快速排序,在调用RemoveDuplicates方法
3、无序数组,可以额外申请空间
1)可以创建一个hash_set,遍历数组,采用find来过滤重复元素
int unsortBuffer[10] = {1,9,3,1,7,3,5,15,12,3}; hash_set hashSet; hashSet.clear(); for(int i = 0; i < 10; i++) { if(hashSet.find(unsortBuffer[i]) == hashSet.end()) { hashSet.insert(unsortBuffer[i]); } }cout<<"{1,9,3,1,7,3,5,15,12,3}, remove duplicates :"<::iterator itor = hashSet.begin(); itor != hashSet.end(); itor++) { cout<<*itor<<","; } cout<

【C++|算法12(删除数组中的重复元素)】3、无序数组,可以额外申请空间
2)可以使用STL的vector,采用erase和unique来删除重复元素
int unsortBuffer[10] = {1,9,3,1,7,3,5,15,12,3}; vector bufferVec; bufferVec.clear(); for(int i = 0; i < 10; i++) { bufferVec.push_back(unsortBuffer[i]); } //先排序 sort(bufferVec.begin(),bufferVec.end()); //使用erase和unique移除vector中重复的元素 bufferVec.erase(unique(bufferVec.begin(),bufferVec.end()),bufferVec.end()); cout<<"{1,9,3,1,7,3,5,15,12,3}, remove duplicates :"<

    推荐阅读