删除数组中重复元素-Hash表方法和set方法
来源:互联网 发布:周杰伦 稻香 知乎 编辑:程序博客网 时间:2024/05/16 17:05
一:相似因子法(我自创的)
按照每个数的个位划分,个位一共有0~9十种情况,我将个位相同的放在同一个链地址中,只需申请一个每个成员为结构体,共有10个成员的数组。这在数据较大时查找前面相同元素能提高很大效率的。
代码如下:
#include <iostream> #include <assert.h> using namespace std; const int N = 10; typedef struct similar_factor{ int val; struct similar_factor* next; similar_factor(int v) : val(v), next(NULL) {} similar_factor() {} } similar_factor; int fill_in(similar_factor* factor, const int value, int index) { similar_factor* new_factor = new similar_factor(value); if(factor[index].next == NULL){ new_factor->next = factor[index].next; factor[index].next = new_factor; } else{ similar_factor *tmp = &factor[index]; while(tmp->next != NULL){ if(tmp->next->val == new_factor->val) return -1; tmp = tmp->next; } tmp->next = new_factor; } return 0; } int main() { int array[] = {90, 91, 1, 2, 90, 5, 91}; similar_factor* factor = new similar_factor[10]; assert(factor != NULL); for(int i=0; i<sizeof(array)/sizeof(int); ++i){ int num = array[i] % 10; if(fill_in(factor, array[i], num) == 0) cout << array[i] << ' '; else continue; } delete []factor; return 0; }
二:set集合方法
我们知道C++的set底层是一颗红黑树,之前有写过红黑树的代码,知道它的机制是插入元素如果碰见相同的元素,直接插入失败,返回false,所以我们可以利用这个机制来做这道题。
代码如下:
#include <iostream> #include <set> #include <algorithm> using namespace std; int main() { int array[] = {90, 91, 1, 2, 90, 5, 91}; set<int> sint; size_t len = sizeof(array) / sizeof(int); for(int i=0; i<len; ++i){ if(sint.insert(array[i]).second) cout << array[i] << ' '; } return 0; }
0 0
- 删除数组中重复元素-Hash表方法和set方法
- 删除数组中重复元素--哈希表方法和set方法
- JavaScript之删除数组中重复元素的方法
- JavaScript之删除数组中重复元素的方法
- Javascript数组删除重复元素的方法
- 删除数组重复元素的方法
- 利用grep()方法删除数组重复元素
- 删除数组中重复元素 (使用stl::set)
- javascript和java数组中去掉重复元素的方法
- 去掉数组中重复的元素方法
- 关于数组的.sort()方法案例:删除数组中重复的元素并排序
- 删除数组中重复元素
- 删除数组中重复元素
- java中循环遍历删除List和Set集合中元素的方法
- 集合ArrayList中删除重复元素两种方法
- 在Java中利用set特性删除重复的数组元素
- 在Java中利用set特性删除重复的数组元素
- javascript扩展数组删除元素方法和随机排序方法
- AngulaJS自定义指令
- 框架基础--反射机制
- Shell while循环
- php判断上传图片类型是否正确
- EventBus 3.0 使用用例
- 删除数组中重复元素-Hash表方法和set方法
- Oracle rank和dense_rank排名函数
- java反射
- Gson简单使用
- J2EE面试题之同步和异步的区别?
- Appium基于安卓的各种FindElement的控件定位方法实践和建议
- Android获取设备唯一标识完美解决方案
- AbstractQueuedSynchronizer的介绍和原理分析
- UIWebView详解