经典指数          
原因
2537
浏览数
0
收藏数
 

数组A由1000W个随机正整数(int)组成,设计算法,给定整数n,在A中找出符合如下等式:n=a+b的a和b,说明算法思路以及时间复杂度是多少?

     举报   纠错  
 
切换
1 个答案
方法一、数组排序,二分 1000w数字存到数组中,需要的地址空间为1000w*4byte=4w kb =40 Mb。这个容量是可以接受的。 将数组快速排序,时间复杂度n*logn 对任给的n n=a+b a,b组合无非是 0,n 1,n-1 ... n/2-1,n/2+1 一共有n个数组需要找出来以确定是否存在这一组。 二分查找n次,时间复杂度为nlog(n) 所以总时间复杂度为O(nlog(n)) 方法二、哈希表 把每个数字都插入到哈希表中,时间复杂度n 确定每组a,b是否存在: 0,n 1,n-1 ... n/2-1,n/2+1 时间复杂度为n*o(1) 总时间复杂度为O(n) 搜到第三种解法不知道对不对: 直接申请一个大小为N的数组,只要40M空间,然后数组中每一个元素对N取余(当然如果比N还大就直接舍弃),取余的值就放在对于数组下标中。比方N为10,元素8,就放数组第8个元素中,然后看看数组第二个元素有没有值就好了。所以复杂度为o(n) ref: http://group.jobbole.com/13848/
 
切换
撰写答案
扫描后移动端查看本题