1、给一组数,其中只有一个数是重复了奇数次,其余都重复了偶数次,如何找出奇数次的那个数
异或运算,复杂度O(n)
Java代码 
intx = a[0];
for(inti =1; i
x = x ^ a[i];
}
System.out.println(x);
int x = a[0];
for(int i = 1; i < a.leght; i++){
x = x ^ a[i];
}
System.out.println(x);
2,上千万条记录,统计出重复记录最多的前N条
内存用Hash表
数据Select top 10 A from TB group by A order by(count(A))
数据结构中的hash表,不是java中的Hash表
key1 ------ v1,v2,v3
key2 ------ v1,v2,v3,v4
key3 ------ v1,v2
key4 ------ v1
3、一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum
Hash表,复杂度O(n)
Java代码 
Map map =newHashMap();
intsum =65;
intkey =0;
for(inti =0; i
key = sum - a[i];
map.put(a[i],a[i]);
if(map.contain(key)){
System.out.println(key +":"+ a[i]);
}
}
Map map = new HashMap();
int sum = 65;
int key = 0;
for(int i = 0; i < a.length; i++){
key = sum - a[i];
map.put(a[i],a[i]);
if(map.contain(key)){
System.out.println(key + ":" + a[i]);
}
}
本文介绍了几种高效的算法技巧,包括使用异或运算查找重复奇数次的元素,利用Hash表统计重复记录最多的项,以及通过Hash表寻找两数之和等于指定值的方法。这些算法均达到了O(n)的时间复杂度。

被折叠的 条评论
为什么被折叠?



