【发布时间】:2015-11-12 20:25:04
【问题描述】:
我有一个只有值 0 和 1 的数组。它们分别存储在数组中。例如,数组可能有前 40% 为 0,其余 60% 为 1。我想找出 0 和 1 之间的分割点。我想到的一种算法是二分搜索。由于性能对我来说很重要,所以不确定二分搜索是否能给我最好的性能。分裂点是随机分布的。该数组以 0 和 1 拆分的格式给出。
【问题讨论】:
-
为什么不只计算零和一的数量,而不是对数组进行排序和搜索?
-
如果你只有一个数组来存储,二分查找是你能得到的最快的。为什么你会认为这太慢了?
-
如果分割点的位置是随机分布的(即得到40/60分割的概率与得到1/99、99/1、50/50等分割的概率相同)那么二分查找是解决这个问题的最快方法。
-
嘿@Fuser97381,如果你有给数组怎么办?这种方法变得次优。请看我的回答。
-
如果你只有一点点,为什么还要存储在数组中?将它们存储为 long,您将立即获得 0 的数量。数组在这里是错误的数据结构。