N个元素的有序数组A,判断是否有 A[i]=i 存在

来源:互联网 发布:常微分方程 知乎 编辑:程序博客网 时间:2024/04/30 02:06

/// <summary>

 //下述算法只对严格单调的整数数组有效,复杂度O(N);
   
/// 查找数组中的一个数k,满足a[k] == k
   
/// 需保证a数组严格单调上升
   
/// </summary>
   
/// <returns>找到返回k,找不到返回-1</returns>
   
public staticintFindNumber(int[]a)
   
{
       
if (a==null)
           
return -1;
       
int left =0, right= a.Length;
       
while (left+1< right)
       
{
           
int mid = left+(right- left)/2;
           
if (a[mid]> mid)
                right
= mid;
           
else
                left
= mid;
       
}
       
return a[left]== left? left:-1;
   
}