我有一个简单的功能
bool function(int*a,int n)
{
for(int i = 0; i<=n-1;i++)
if(a[i]==i)
return true;
return false;
}
,其中a
是一个包含不同元素的有序向量,n是向量的大小。
我需要提高此算法的时间复杂度。我的第一个想法是使用二进制搜索,但我可以弄清楚如何在这种情况下使递归工作。基本上函数检查排序数组中是否有索引与元素相等的元素。
答案 0 :(得分:3)
如果没有提供完整的解决方案,您就可以使用二进制搜索。一些提示:
a [i]是不同的并且正在增加整数
如果a [i]在某个时刻大于i,那对于a [j]意味着什么,其中j>一世? (与i + 1相比,以[i + 1]开头)
类似地,如果a [i]&lt; i,这对j的一个[j]意味着什么?我?
将这些事实放在一起。这对于[i]“越过”我的意思是什么意思?你怎么知道发生了什么?