剑指offer——570~n-1中缺失的数字

题目:0~n-1中缺失的数字。

  一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。

  在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

题解:

  使用二分法即可。

  

 1 int findLostNum(const vector<int> &data)
 2 {
 3     if (data.size() == 0)return -1;
 4     int L = 0, R = data.size() - 1, M;
 5     if (data[R] == R)return -1;
 6     while (L >= 0 && R < data.size() && L <= R)
 7     {
 8         M = (R - L) / 2 + L;
 9         if (data[M] == M)L = M + 1;
10         else if (data[M] > M)
11             if (M > 0 && data[M - 1] == M-1)return M;
12             else if (M == 0)return 0;
13             else R = M - 1;
14     }
15     return -1;
16 }

 

posted @ 2019-10-20 10:31  自由之翼Az  阅读(143)  评论(0编辑  收藏  举报