提高了算法的时间复杂度

Improve the tempral complexity of the algorithm

本文关键字:时间复杂度 算法      更新时间:2023-10-16

我有一个简单的函数

bool function(int*a,int n)
{
  for(int i = 0; i<=n-1;i++)
    if(a[i]==i)
       return true;
  return false;
}

,其中a为包含不同元素的排序向量,n为该向量的大小。

我需要提高这个算法的时间复杂度。我的第一个想法是使用二分查找,但我能想出如何让递归在这种情况下工作。基本上,该函数检查排序数组中是否存在索引与该元素相等的元素。

虽然没有给出完整的解决方案,但您在二进制搜索的正确轨道上。一些提示:

a[i]是递增的整数

如果a[i]在某一点大于i,对于a[j],当j> i时,这意味着什么?(与i+1相比,从a[i+1]开始)

同理,如果a[i] <a[j]表示j><我吗?>

把这些事实放在一起。当[i]与i"交叉"时,这意味着什么?你如何找到发生这种情况的地方?