我有一个只有0和1值的数组。它们分别存储在数组中。例如,数组可能有40%为0,剩余60%为1.我想找出0和1之间的分裂点。我想到的一种算法是二进制搜索。由于性能对我来说很重要,不确定二进制搜索是否能给我带来最佳性能。分裂点是随机分布的。该数组以0s和1s格式分割。
答案 0 :(得分:8)
当你给出数组时,保持计数的看似聪明的答案并不成立。
计数是O(n)
,线性搜索也是如此。因此,计数不是最佳的!
二进制搜索是您的朋友,可以在O(lg n)
时间内完成工作,您可能知道way better。
当然,如果您必须处理数组(从文件,用户输入等处读取),请利用该时间来计算1s
和0s
的数量,并且完成它(你甚至不需要存储任何数据,只需保留计数)。
要驱动点回家,如果你正在编写一个库,它有一个名为getFirstOneIndex(sortZeroesOnesArr: Array[Integer]): Integer
的函数,它接受1和0的排序数组并返回第一个1
的位置,不要数,二进制搜索。