在一个数组中找 差值最大的两个数 差值最小的两个数 推广到 点对
先求差值最大的:
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)
轉載于:https://www.cnblogs.com/juandx/p/4065470.html
總結
以上是生活随笔為你收集整理的在一个数组中找 差值最大的两个数 差值最小的两个数 推广到 点对的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设定网页最小最大宽度和高度(兼容IE6)
- 下一篇: javascript中错误使用var造成