Javascript 二进制搜索最接近的索引/索引';将s转换为带有O(对数n)的值

Javascript 二进制搜索最接近的索引/索引';将s转换为带有O(对数n)的值,javascript,algorithm,binary-search,Javascript,Algorithm,Binary Search,我已将dateTime为毫秒的对象的数组(可以存在重复项)排序为对象的成员,我想获取数组的索引/索引,该数组与currentTime的日期时间差最小。我曾想过使用二进制搜索,但它需要密钥出现在数组中。我可以使用simple for循环,但它将是O(n)是否有一个有效的二进制搜索变量来获得具有O(logn)效率的索引/索引 我想得到数组的索引,它与currentTime的日期时间差最小 因此,您希望找到小于或等于currentTime的最大值和大于或等于currentTime的最小值。你的答案必须

我已将dateTime为毫秒的对象的数组(可以存在重复项)排序为对象的成员,我想获取数组的索引/索引,该数组与currentTime的日期时间差最小。我曾想过使用二进制搜索,但它需要密钥出现在数组中。我可以使用simple for循环,但它将是O(n)是否有一个有效的二进制搜索变量来获得具有O(logn)效率的索引/索引

我想得到数组的索引,它与currentTime的日期时间差最小

因此,您希望找到小于或等于
currentTime
最大值和大于或等于
currentTime
最小值。你的答案必须是其中之一

对于第一个,您可以这样编写二进制搜索:

while left < right:
  m = left + (right - left) / 2
  if array[m] <= target: # using <= here to save the right index 
                         # in store in case the key exists
    left = m + 1
    store = m
  else:
    right = m
我想得到数组的索引,它与currentTime的日期时间差最小

因此,您希望找到小于或等于
currentTime
最大值和大于或等于
currentTime
最小值。你的答案必须是其中之一

对于第一个,您可以这样编写二进制搜索:

while left < right:
  m = left + (right - left) / 2
  if array[m] <= target: # using <= here to save the right index 
                         # in store in case the key exists
    left = m + 1
    store = m
  else:
    right = m

“需要在数组中存在密钥”是什么意思?通过稍微修改的二进制搜索,您可以跟踪围绕查询datetime的数组的两个缩小端点,找到与查询datetime直接相邻的两个datetime。那么其中一个就是答案。看看。通过二进制搜索,值不需要在数组中才能找到最近的位置。fuyushimoya:我认为二进制搜索是指搜索键存在于已排序的数组/集合中。你说的“它需要在数组中出现键”是什么意思,您可以跟踪围绕查询datetime的两个缩小的数组端点,找到与查询datetime直接相邻的两个datetime。那么其中一个就是答案。看看。这个值不需要在数组中,就可以通过二进制搜索找到最近的位置。fuyushimoya:我认为二进制搜索是为了让搜索键存在于已排序的数组/集合中。