【发布时间】:2015-06-19 22:08:45
【问题描述】:
比如说你有
var arr = [0,0,0,1,0,1,1,0,0,0,1];
而你想找到第一个 1 相对于第一个 0 的位置。
arr.indexOf 会直接解决问题,但我不确定它是否会线性比较数组中的每个项目?二进制搜索不起作用,因为如果您排序然后查找元素,您会丢失索引...任何其他方法可以到达第一个 1 并说啊哈!索引 3,一次不去一个元素?
【问题讨论】:
-
“参照第一个0”是什么意思?
-
您不能比线性搜索做得更好,因为必须检查第一个
1之前的每个元素。相反,二分搜索起作用的原因是因为列表是排序的并且每个元素中都包含信息(即任何给定元素之前的所有元素都小于或等于它)。你的情况没有这样的结构。 -
@user2357112 参考第一个 0 我的意思是参考 arr[0];因此,例如,第一个 1 相对于第一个 0 的索引为 3。如果它参考第二个 0,它将具有索引 2
-
“参照”是什么意思?
-
...您也可以将更改表示为当前数字重复次数的列表,因此以
0开头,您可以使用[4,3,1,3,2,4]。或者你可以用两种方式表示它,并使用在给定时间有意义的任何列表。
标签: javascript arrays algorithm