先求差值最大的:
1、找出最大值和最小值 然后做差, 每次比较相邻的两个数(比如先0,1 然后2,3),然后每次比较记录下最大和最小的差值,可以比较1.5N次得到结果,和分为奇数偶数位比较一样的复杂度
2、由于抽屉原来,设最大的值和最小的值为maxV和minV,那么最大差值不会超过delta = (maxV-minV)/(N-1), 用反证法可以证明,编程之美p171,然后根据delta的值分为N个桶,最大差值显然不会再桶内,所以找到桶内最大的值和最小的值,即可。o(n)
如果是点对,那么 参考 凸包,卡壳算法。。。我还不会。。。http://blog.csdn.net/wangyangkobe/article/details/6081975
然后是差值最小的“
1、排序然后扫描相邻的,o(nlogn)
2、把所以值用visit数组标记,visit[a[i]] = 1,然后找到最相邻的两个1即可,bit貌似可以优化
点对:不能排序是个问题了。。。考虑编程之美p170算法,分治,分为左右两个部分,两边找出最小的,设最小的为mdin,然后再判断两个点一个在做一个在右的情况,只考虑分布<2*midn的情况,然后两个矩形。。。8个点(我怎么感觉是6个呢),然后再按照y排序找,每次找相邻8个点即可,这一步就是o(n)了,然后总的o(nlogn)