在一个整形数组中去掉重复的数字
2014-07-18 10:35
330 查看
请把一个整形数组中重复的数字去掉。例如:
1, 2, 0, 2, -1, 999, 3, 999, 88
答案应该是:
1, 2, 0, -1, 999, 3, 88
------------------------------------------------------------------
思路1:
依次遍历数组,对于一个元素,把这个元素和之前所有的元素比较。如果相同,就把这个元素过滤掉,用后面不重复的元素覆盖。这里采用一个变量k,k表示下一个元素应该放在arr数组中的哪一个位置,如果元素与前边的任何一个元素相同,则k不变这个元素就等着被下一个不重复的元素覆盖,如果不同且把这个元素放在arr数组的k位置,然后k加1,存放下一个不重复的数组。
思路2:利用hash表(这里的hash是个数据结构,里面存放正数和负数)的思想,先求出数组中的最大值,然后可以确定hash表的大小,然后就可以遍历arr数组,根据这个数的大小,放到hash[abs(arr[i])]中的相应位置,里面的标记置为1,下次再碰到直接next。
1, 2, 0, 2, -1, 999, 3, 999, 88
答案应该是:
1, 2, 0, -1, 999, 3, 88
------------------------------------------------------------------
思路1:
依次遍历数组,对于一个元素,把这个元素和之前所有的元素比较。如果相同,就把这个元素过滤掉,用后面不重复的元素覆盖。这里采用一个变量k,k表示下一个元素应该放在arr数组中的哪一个位置,如果元素与前边的任何一个元素相同,则k不变这个元素就等着被下一个不重复的元素覆盖,如果不同且把这个元素放在arr数组的k位置,然后k加1,存放下一个不重复的数组。
#include<iostream.h> void main() { int arr[]={1,2,0,2,-1,999,3,999,88},k=1; //k是数放在arr中的位置 for(int i=1;i<sizeof(arr)/sizeof(int);i++) { bool f=true; for(int j=0;j<i;j++) if(arr[i]==arr[j]) f=false; if(f) arr[k++]=arr[i]; } for(i=0;i<k;i++) cout<<arr[i]<<" "; cout<<endl; }---------------------------------------------------------------------------------------------------------------------
思路2:利用hash表(这里的hash是个数据结构,里面存放正数和负数)的思想,先求出数组中的最大值,然后可以确定hash表的大小,然后就可以遍历arr数组,根据这个数的大小,放到hash[abs(arr[i])]中的相应位置,里面的标记置为1,下次再碰到直接next。
#include<iostream.h> #include<malloc.h> #include<math.h> struct hashtable { int num; int negative; }; int findmax(int arr[],int len) { int max=-999999; for(int i=0;i<len;i++) if(abs(arr[i])>max) max=arr[i]; return max; } void main() { int arr[]={1,2,0,2,-1,999,-2,3,-2,-1,999,88},max=0; max=findmax(arr,sizeof(arr)/sizeof(int)); hashtable *hash=(hashtable *)malloc((max+1)*sizeof(hashtable)); for(int i=0;i<=max;++i) //初始化hash表 { hash[i].num=0; hash[i].negative=0; } int k=0; //k是数放在arr中的位置,遇到重复的数k不变 for(i=0;i<sizeof(arr)/sizeof(int);++i) { if(arr[i]>=0&&hash[arr[i]].num==0) { hash[arr[i]].num=1; arr[k++]=arr[i]; } else if(arr[i]<0&&hash[abs(arr[i])].negative==0) { hash[abs(arr[i])].negative=1; arr[k++]=arr[i]; } } for(i=0;i<k;++i) cout<<arr[i]<<" "; cout<<endl; }
相关文章推荐
- 把一个整形数组中重复的数字去掉 - 微软面试题
- 166 请把一个整形数组中重复的数字去掉
- 请把一个整形数组中重复的数字去掉
- 请把一个整形数组中重复的数字去掉
- 把一个整形数组中重复的数字去掉 - 微软面试题
- 如何把一个整型数组中重复的数字去掉
- 开辟一个空房间,随机生成一个有30个数的整形数组,找出其中的重复数字,输出其余数字
- (笔试题)把一个整数数组中重复的数字去掉
- JAVA去掉一个已排序数组的重复数字
- (六)一个判断整形数组中是否有重复数字的简单算法
- 一个长度为N的整形数组,数组中每个元素的取值范围是[0,N-1],写一个算法判断数组中是否存在重复的数字
- 把一个整形数组中重复的数 c892 字去掉
- 数据库某个字段是1,2,3形式存储,传入一个数字,如果这个数组有这个值,修改这个字段,去掉和传入一样的数
- (思科笔试)数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
- 3.有一个整形数组,只有一个数字出现了一次,请编写程序判断这个数字(大概题目就是这样的,记不太清了)
- 有个数组中有100w个数,其中有一个数重复了50w次,要求找出这个数字
- 数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
- leetcode:Remove Duplicates from Sorted Array II (允许重复一次,去掉数组多余数字)【面试算法题】
- 去掉排序数组中重复的数字
- 有一个数组,存储的元素为1到10000000的任意数,在其中查找出一个重复的数字