这是解决两个水晶球问题的正确方法吗?

问题描述 投票:0回答:1

我有关于这个问题的讲座,据我了解,我必须找到这个球会破裂的最低点。我想到使用二分查找来获得 O(logN) 时间复杂度。如果球在索引处破裂并在索引 - 1 处再次破裂,我们只需继续搜索,直到找到它破裂的索引,而左边的索引没有破裂。

function two_crystals(data : boolean[]) : number {
  let first_index = 0;
  let last_index = data.length - 1;

  while(first_index <= last_index){
    let mid_index = Math.floor((last_index + first_index) / 2);

    if (data[mid_index]) {
      // Check if it doesn't break at the previous floor
      if (mid_index === 0 || !data[mid_index - 1]) {
        return mid_index;
      }
      // Continue searching in the lower half
      last_index = mid_index - 1;
    } else {
      // Continue searching in the upper half
      first_index = mid_index + 1;
    }
  
  }
  
  return -1
}

也许我没有正确理解问题,但我认为这个选项更好

javascript algorithm search data-structures time-complexity
1个回答
0
投票

问题的关键在于,你无法用破碎的晶体来检查晶体是否破碎。也就是说,晶体只有在不破裂的情况下才可以重复使用。因此,假设第一个晶体在

mid_index
处破裂,现在您用第二个晶体在
mid_index - 1
处检查。假设它再次破裂。现在你没有更多的水晶了,也无法检查其他楼层。因此,这个解决方案不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.