这个问题的最佳解决方案是什么(小于o(n))
给定一个连续元素增加1的正整数数组(除了不增加1的单个元素——“损坏”的开始),返回损坏开始位置的索引。
例1:
阵法:[5,6,7,8,12,13]
索引:0 1 2 3 4 5
腐败从索引4开始。
例2:
数组:[5,2,3,4,5,6]
索引:0 1 2 3 4 5
腐败从索引1开始。
p、 我的解是o(n),我也试着把它分成两部分,但它会减少一半。
提示:我被告知我可以使用二进制搜索。
编辑:
我的解决方案只是迭代数组,看看差值是大于还是小于1。
5条答案
按热度按时间pjngdqdw1#
4ngedf3f2#
o(n)是你唯一的选择。二进制搜索是o(log(n)),但它只适用于在排序列表中搜索特定的数字。您既没有已排序的列表,也没有要搜索的特定数字
m528fe3b3#
试试这个
它利用了这样一个事实:如果数组没有损坏,子数组的第一个和最后一个元素之间的差值等于它的长度。
kg7wmglp4#
p1tboqfb5#
我们可以检查当前和上一个元素的差异,对吗。如果diff不是1,我们需要中断。它在js中