分析题目,仅仅判断整数数组中是否存在Ai = i,可以转而判断整数数组形成的直线,和( Ai = i是一条过原点的,斜率为1的直线)是否有交点即可。
是否存在交点有以下情况
1、整数数组的斜率等于1:或者重复或者无交点
2、整数数组的斜率大于1:只有当整数数组的最小点,位于Ai = i这条直线的下方,整数数组的最大点,位于Ai = i这条直线的上方,才可能有交点
3、整数数组的斜率小于1:只有当整数数组的最小点,位于Ai = i这条直线的上方,整数数组的最大点,位于Ai = i这条直线的下方,才可能有交点
所以:
if (A1 < 1)
{
if (An > n) return True;
else return False;
}
else if(A1 == 1)return True;
else
{
if(An < n)return Ture;
else return False;
}
}
引申出问题:求出交点i。
先求是否有交点;当有交点的情况下,使用二分法查找该交点。