Java 0到n详解

0到n-1中缺失的数字

题目描述

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

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

样例

输入:[0,1,2,4]

输出:3

解法

找出第一个与下标不对应的数字即可。

特殊情况:

/**
 * @author bingo
 * @since 2018/12/8
 */

class Solution {
    /**
     * 获取0~n-1缺失的数字
     *
     * @param nums 数组
     * @return 缺失的数字
     */
    public int getMissingNumber(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        int n = nums.length;
        int start = 0, end = n - 1;
        while (start <= end) {
            int mid = start + ((end - start) >> 1);
            if (nums[mid] != mid) {
                if (mid == 0 || nums[mid - 1] == mid - 1) {
                    return mid;
                }
                end = mid - 1;
            } else {
                start = mid + 1;
            }
        }
        return start == n ? n : -1;

    }
}

测试用例

  1. 功能测试(缺失的数字位于数组的开始、中间或者末尾);
  2. 边界值测试(数组中只有一个数字 0);
  3. 特殊输入测试(表示数组的指针为空指针)。

教程来源于Github,感谢apachecn大佬的无私奉献,致敬!

技术教程推荐

技术领导力实战笔记 -〔TGO鲲鹏会〕

硅谷产品实战36讲 -〔曲晓音〕

趣谈Linux操作系统 -〔刘超〕

Kafka核心源码解读 -〔胡夕〕

讲好故事 -〔涵柏〕

搞定音频技术 -〔冯建元 〕

超级访谈:对话汤峥嵘 -〔汤峥嵘〕

快速上手C++数据结构与算法 -〔王健伟〕

云时代的JVM原理与实战 -〔康杨〕