去除整型数组中的重复数字
2016-06-27 20:12
218 查看
题目:如何把一个整型数组中重复的数字去掉。
分析:首先通过快速排序对数组进行排序,然后对排好序的数组经过一次遍历,将其重复元素通过交换,最终达到删除重复元素的目的。总的时间复杂度为 O(nlogn),空间复杂度为O(1)。下面借助c语言类库中自带的快速排序算法qsort,来实现排序。
具体实现如下:
备注:sort( )和qsort( )的知识点可参考 C++ 排序函数 sort(),qsort()的用法。
分析:首先通过快速排序对数组进行排序,然后对排好序的数组经过一次遍历,将其重复元素通过交换,最终达到删除重复元素的目的。总的时间复杂度为 O(nlogn),空间复杂度为O(1)。下面借助c语言类库中自带的快速排序算法qsort,来实现排序。
具体实现如下:
#include <iostream> int comp(const void *a, const void *b) { return *(int *)a - *(int *)b; } int Unique(int arr[], int len) { if (!arr || len <= 0) return 0; qsort(arr, len, sizeof(int), comp); int k = 0; for (int i = 1; i < len; i++) { if (arr[k] != arr[i]) { arr[k + 1] = arr[i]; // arr[k + 1] 始终指向“当前已得到的无重复数组”的最后一个元素。 k++; // k++后,k 对应的既是“当前已得到的无重复数组”的最后一个元素的下标。 } } return (k + 1); // 去重后,数组的长度 } int main(int argc, const char * argv[]) { int arr[] = {1,2,3,5,9,6,5,5,3,7}; int len = sizeof(arr)/sizeof(int); int newLen = Unique(arr, len); for (int i = 0; i < newLen; i++) printf("%d ", arr[i]); printf("\n"); return 0; }
备注:sort( )和qsort( )的知识点可参考 C++ 排序函数 sort(),qsort()的用法。
相关文章推荐
- 快速排序
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#快速排序算法实例分析
- C#递归算法之快速排序
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解