首先这个问题绝对可以在O(n)的时间内求解,现在主要想一下能不能有更快的方法。

 

1)

divide-conquer,分解成子数组后处理

 

2)

二分查,子数组array[s,t]里边

mid = (s+t)/2 

if t < array[mid]:

  // no need to check the part after mid

else if s > array[mid]:

     // no need to check the part before mid

而,如果元素的值都不相同

if mid < array[mid]:

     // no need to check the part after mid

else if mid > array[mid]:

     // no need to check the part before mid

 

3)

子数组array[s,t]里边,如果元素的值都不相同

array[s] = s && array[t] = t

那么这个子数组也不用检查了,一定都符合条件。

 

没有仔细地算下时间复杂度,不过在值可以相同的情况下,最差情况应该要O(n)时间。在值都不等的情况下,最好情况应该就是O(1)时间。猜测平均时间应该比较接近log(n),如果有比较好的计算复杂度方法,欢迎留言给我。

相关文章:

  • 2022-02-26
  • 2022-12-23
  • 2021-07-25
  • 2021-11-12
  • 2022-12-23
  • 2021-07-01
  • 2021-11-30
  • 2021-09-10
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-22
  • 2021-09-30
相关资源
相似解决方案