计数排序——有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
2009-04-13 12:59
781 查看
在高手那里学到一招~很巧妙~
计数排序
建立一个int c [1 000 000]的数组,初始值当然都是0
由于只有一个数字出现了两次,将这个数值做为新数组的下标(c[old[i]],将新数组的数值++,如果新数组的数值==2,很好,得到了这个数olds[i]。
原来的数组 int olds[]
新数组 int new[] = new int [1 000 000]
for(int old : olds){
new[old] ++;
if(new[old]==2)
return old;
}
缺点:如果olds数组内的数值范围太大,new数组需要更多的空间
该算在原数组内数值范围较小时效率不错!
计数排序
建立一个int c [1 000 000]的数组,初始值当然都是0
由于只有一个数字出现了两次,将这个数值做为新数组的下标(c[old[i]],将新数组的数值++,如果新数组的数值==2,很好,得到了这个数olds[i]。
原来的数组 int olds[]
新数组 int new[] = new int [1 000 000]
for(int old : olds){
new[old] ++;
if(new[old]==2)
return old;
}
缺点:如果olds数组内的数值范围太大,new数组需要更多的空间
该算在原数组内数值范围较小时效率不错!
相关文章推荐
- 软件开发者面试百问-----有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
- 一个全是32位整数的大数组,除了其中一个数字出现2次外,其余的数字都出现了3次。如何找出那个只出现了两次的数字?
- 一个整数数组里面,除了两个数之外,其他的数字都出现了两次,写一个程序找出这两个数
- 一个整数数组里面,除了两个数之外,其他的数字都出现了两次,写一个程序找出这两个数
- 问题描述如下: 有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明); 要求找出这2.5亿个数字里面,不重复的数字的个数; 另外,可用的内存限定为600M; 要求算法尽量高效,最优;
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 一个整型数组里除了一个数字之外,其他的数字都出现了两次,找出出现一次的数字
- 一个存在重复数字的正整数数列,每个数都不超过32,找出其中所有重复的数字
- 给定整数数组,除了一个元素之外,每个元素都会出现两次。 找到那个只出现一次的
- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字
- 算法-在1001个整数中找出一个重复出现的数字
- 1.求第n个斐波那契数(非递归实现)。 2.一个数组中只有两个数字是出现一次,其他所有数字都出现 了两次。 找出这两个数字,编程实现。
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 一个含n个元素的整数数组至少存在一个重复数, 请编程实现,在O(n)时间内找出其中任意一个重复数。
- 给出2n+1个数,其中有2n个数出现过两次,如何用最简便的方法找出里面只出现了一次的那个数(转载)
- 面试题:在一个数组中有0-99之间的整数101个(数组无序),用高效方法找出其中的唯一的重复元素!
- 一个数组只有两个数字出现一次,其他数字都出现两次,找出这两个数
- 一个整型数组里除了两个数字之外,其它的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 阿里2015笔试附加题-一个数组中存在一组数字,其中有一个数字重复3遍,其他2遍,在O(1)空间找到那个重复3次的数