通知 网站从因情语写改为晴雨,这个网站的模板也从calmlog_ex改为 whimurmur

leetcode 剑指 Offer 53 - II. 0~n-1中缺失的数字

88人浏览 / 0人评论 / | 作者:whisper  | 分类: 剑指offer2  | 标签: 剑指offer2  | 

作者:whisper

链接:https://www.proprogrammar.com/article/878

声明:请尊重原作者的劳动,如需转载请注明出处


剑指 Offer 53 - II. 0~n-1中缺失的数字

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

示例 1:

输入: [0,1,3]
输出: 2

示例 2:

输入: [0,1,2,3,4,5,6,7,9]
输出: 8

难度:简单;标签:数组,二分查找;编程语言:JAVA


我的解法

class Solution {
    public int missingNumber(int[] nums) {
        int sum = 0;
        for(int n: nums)sum += n;
        return -sum + (nums.length + 1) * nums.length / 2;
    }
}

不缺数时是等差数列,可以等差数列求和,缺时和也算出来,减一下


其它解法1

class Solution {
    public int missingNumber(int[] nums) {
        int n = nums.length;
        for (int i = 0; i < n; i++) {
            if (nums[i] != i) return i; 
        }
        return n;
	}
}

这里利用数组是递增的来做的


其它解法2

class Solution {
    public int missingNumber(int[] nums) {
        int i = 0, j = nums.length - 1;
        while(i <= j) {
            int m = (i + j) / 2;
            if(nums[m] == m) i = m + 1;
            else j = m - 1;
        }
        return i;
    }
}

这里是利用二分法来做的,nums[m] == m时,是正常的,缺的数在右边,不正常时在左边,最后i,j会在缺失的数的位置附近

看一下题解:面试题53 - II. 0~n-1 中缺失的数字(二分法,清晰图解)


亲爱的读者:有时间可以点赞评论一下

点赞(0) 打赏

全部评论

还没有评论!
广告位-帮帮忙点下广告