提高算法的时间复杂度

时间:2016-06-27 22:47:44

标签: c++ algorithm time-complexity

我有一个简单的功能

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

,其中a是一个包含不同元素的有序向量,n是向量的大小。

我需要提高此算法的时间复杂度。我的第一个想法是使用二进制搜索,但我可以弄清楚如何在这种情况下使递归工作。基本上函数检查排序数组中是否有索引与元素相等的元素。

1 个答案:

答案 0 :(得分:3)

如果没有提供完整的解决方案,您就可以使用二进制搜索。一些提示:

a [i]是不同的并且正在增加整数

如果a [i]在某个时刻大于i,那对于a [j]意味着什么,其中j>一世? (与i + 1相比,以[i + 1]开头)

类似地,如果a [i]&lt; i,这对j的一个[j]意味着什么?我?

将这些事实放在一起。这对于[i]“越过”我的意思是什么意思?你怎么知道发生了什么?