zoukankan      html  css  js  c++  java
  • 在一个数组中找 差值最大的两个数 差值最小的两个数 推广到 点对

    先求差值最大的:

    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)

  • 相关阅读:
    1月27日 常用函数
    1月25日 JavaScript的DOM操作
    1月25日 JavaScript简介与语法
    1月24日 样式表案例
    5月14日 数字顺序打印并求和
    5月14日 根据班级人数,求平局分,最大值,最小值
    5月14日 九九乘法口诀
    5月14日 打印100以内与7有关的数
    5月14日 函数练习 100以内奇数的和
    5月14日 枚举类型
  • 原文地址:https://www.cnblogs.com/juandx/p/4065470.html
Copyright © 2011-2022 走看看