如何快速找到排好序的数组中最先不连续的数字N

现在有一大堆自然数组成的小到大数组arr,其中会有123456910  这样就要找到6(最先不连续的数字)

举例:【12356789】 找到3

           【012345678】 找到8

第一种:遍历数组判断是否差1,返回值即可   算法时间复杂度O(n)

第二种:

/*
         * 传输方向:指挥机用户机
         *指令长度:共3 bytes
         *说明:本指令为累积式应答,指令中的序号表示指挥机已经接收到了一直到该序号的所有定位记录,例如:
         *假设指挥机已接收到定位记录序号为0,1,2,3,5,6,8,则收到应答指令中的序号应为3。
        */
        public static int Sh(int le, int r, int[] arr)
        {
            if (le + 1 == r)
                return arr[le];

            int mid = (le + r) / 2;

            if (arr[mid] == mid)
                return Sh(mid, r, arr);

            if (arr[mid] != mid)
                return Sh(0, mid, arr);

            return mid;
        }

 显然第二种算法时间复杂度为:O(logn)

以上!

posted @ 2016-08-19 12:20 araki 阅读(...) 评论(...) 编辑 收藏