LeetCode剑指offer 53 0~n-1中缺失的数(二分法和特征法)

题目:
在这里插入图片描述
这个题我是用二分法写的:下面是代码,这个就是一个正常的二分过程,只不过,最后的值由left给出,这点通过模拟几次例子就可以得到:当left>right时,那个left就是缺失的数。
这个思路题解里面也有一位大佬给出了,看到他的解释,我才明白,这个题又是一类二分法的基础题型。我把他的题解附在这里。
法一
在这里插入图片描述
在这里插入图片描述
复杂度分析:
时间复杂度 O(log N)O(logN): 二分法为对数级别复杂度。
空间复杂度 O(1)O(1): 几个变量使用常数大小的额外空间。

int missingNumber(int* nums, int numsSize){
    int flag=0;
    int left=0 ;
    int right = numsSize -1;
    int mid;
    while(left <=right) {
         mid = left + (right - left)/2;
        if (nums[mid] == mid) {
            left = mid + 1;
        } else if (nums[mid] > mid) {
            right = mid - 1;
        }
    }
    return left;
}

这是执行结果。
在这里插入图片描述
法二:
还有一种解题方法就是找规律,忽略掉本身这个题在考二分,直接用一遍遍历,找到第一个nums[i]!=[i]的值就好了。最后执行效率也挺高的。

猜你喜欢

转载自blog.csdn.net/J_aSON_/article/details/107581026