找出重复的整数
2012-10-27 23:11
92 查看
在一个给定的数型组中,找出重复的整数:
比如int array[5] = {1,1,3,3,4,5,6}重复的整数是1 ,3。
我的想法,先对数组进行排序,使数组处于有序状态,这样一来就容易判断重复的数字。我的判断方法是:用两个指针分别指向两个数字,比如用current指针指向第一个数字1next指针指向第二个数字1,如果current指向的数字等于next指向的数字说明有重复的数字,然后让next指针下移一个数字,指向第三个数字,然后再判断current与next是否相等,如果相等,让next继续下移,直到curr指向的值不等于next指向的值,然后next-1对应的数字一定是重复的,然后让current=next,next=current+1,进入下一次循环判断。如果是连续的两个数字比如current指向第5个数字是4,next指向第6个数字是5,此时虽然next指向的值不等于current指向的值,但显然没有重复的值,所以还应该加个判断如果他们相邻且不相等,让他们两个指针都下移,然后进入下一次循环判断。算法介绍得差不多了,下来咱就让代码说话吧。
快速排序算法:参考了数据结构(c语言版) 严蔚敏 吴伟民 编著 清华大学出版社
比如int array[5] = {1,1,3,3,4,5,6}重复的整数是1 ,3。
我的想法,先对数组进行排序,使数组处于有序状态,这样一来就容易判断重复的数字。我的判断方法是:用两个指针分别指向两个数字,比如用current指针指向第一个数字1next指针指向第二个数字1,如果current指向的数字等于next指向的数字说明有重复的数字,然后让next指针下移一个数字,指向第三个数字,然后再判断current与next是否相等,如果相等,让next继续下移,直到curr指向的值不等于next指向的值,然后next-1对应的数字一定是重复的,然后让current=next,next=current+1,进入下一次循环判断。如果是连续的两个数字比如current指向第5个数字是4,next指向第6个数字是5,此时虽然next指向的值不等于current指向的值,但显然没有重复的值,所以还应该加个判断如果他们相邻且不相等,让他们两个指针都下移,然后进入下一次循环判断。算法介绍得差不多了,下来咱就让代码说话吧。
快速排序算法:参考了数据结构(c语言版) 严蔚敏 吴伟民 编著 清华大学出版社
#include "iostream" using namespace std; int Partition(int array[], int low, int high) { int pivotkey = array[low]; while (low < high) { while ((low < high) && (array[high] >= pivotkey)) { high--; } array[low] = array[high]; while ((low < high) && (array[low] <= pivotkey)) { low++; } array[high] = array[low]; } array[low] = pivotkey; return low; } void QuickSort(int array[], int low, int high) { if (low < high) { int pivot = Partition(array, low, high); QuickSort(array, low, pivot-1); QuickSort(array, pivot+1, high); } } void FindDifferentNum(int array[], int lenthOfArray) { int current = 0; int next = 1; for (int i=0; i<lenthOfArray-1; i++) { if (array[current] == array[next]) { next++; continue; } else if (next-current > 1) // 两个数字不相等而且不相邻,那么array[current]==array[next-1] { // 所以把array[next-1]打印出 cout << array[next-1] << " "; current = next; next++; } else // 两个数字不相等而且相邻的情况 { current = next; next++; } } if (current != lenthOfArray-1) { cout << array[current] << endl; } } void main(){ int array[10] = {3, 3, 2, 1, 9, 9, 6, 5, 10, 10}; cout << "数组中的原始数字是:" << endl; for (int i=0; i<10; i++) { cout << array[i] << " "; } cout << endl; QuickSort(array, 0, 9); cout << "排序后的结果是:" << endl; for (i=0; i<10; i++) { cout << array[i] << " "; } cout << endl; cout << "数组中重复的数字是" << endl; FindDifferentNum(array, sizeof(array)/sizeof(int)); }
相关文章推荐
- 大数据-25亿个数找出不重复的整数-双层桶-代码
- [海量数据处理]用2-Bitmap找出数组中不重复的整数
- 2.5亿个整数中找出不重复的数代码实现
- 156 含n个元素的整数数组至少存在一个重复数,在 O(n)时间内找出其中任意一个重复数
- 面试题:在一个数组中有0-99之间的整数101个(数组无序),用高效方法找出其中的唯一的重复元素!
- 2.5亿个整数中找出不重复的整数 bitmap
- 问题描述如下: 有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明); 要求找出这2.5亿个数字里面,不重复的数字的个数; 另外,可用的内存限定为600M; 要求算法尽量高效,最优;
- 计数排序——有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
- leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组
- 一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1
- 在2.5亿个整数中找出不重复的整数的C++实现源代码
- 软件开发者面试百问-----有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
- 02_对N个长度最长可达到1000的数进行排序、对给定的一个字符串,找出有重复的字符,并给出其位置、输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序
- 找出一段连续的正整数序列中重复(或缺失)的那个数
- 面试题:n个整数的序列,其中一个整数重复次数超过一半,在O(n)时间内找出该整数
- 运用bitmap解决一道海量数据处理面试题:在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。
- 取值为[1,n-1] 含n 个元素的整数数组至少存在一个重复数,O(n) 时间内找出其中任意一个重复数
- 一个含n个元素的整数数组至少存在一个重复数, 请编程实现,在O(n)时间内找出其中任意一个重复数。
- 运用bitmap解决一道海量数据处理面试题:在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。
- 取值为[1,n-1]含n个元素的整数数组至少存在一个重复数,找出一个重复元素