美文网首页
LeetCode 每日一题 [67] 0~n-1中缺失的数字

LeetCode 每日一题 [67] 0~n-1中缺失的数字

作者: 是小猪童鞋啦 | 来源:发表于2020-07-27 07:49 被阅读0次
    LeetCode 0~n-1中缺失的数字 [简单]

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof

    示例 1:

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

    示例 2:

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

    限制:

    1 <= 数组长度 <= 10000

    题目分析
    解法1

    因为长度为 n - 1,每个数据都是唯一的,而且每个数字都是在 0 - n -1 之间 而且只有一个不在此范围中 可以迭代,根据数组下标的特性 只要 nums[i] != i;则返回i 只能从小向大迭代

    解法2

    顺序数组查找问题 解决思路就是二分法

    代码实现
    public class MissingNumber {
        public static void main(String[] args) {
            int[] nums = {1, 2, 3};
            System.out.println(missingNumber(nums));
        }
    
        public static int missingNumber1(int[] nums) {
            int left = 0;
            int right = nums.length - 1;
            while (left <= right) {
                int mid = (left + right) / 2;
                if (nums[mid] == mid) {
                    left = mid + 1;
                } else {
                    right = mid - 1;
                }
            }
            return left;
        }
    
        public static int missingNumber(int[] nums) {
            if (nums.length == 1) {
                return nums[0] == 0 ? 1 : 0;
            }
            int i;
            for (i = 0; i < nums.length; i++) {
                if (nums[i] != i) {
                    return i;
                }
            }
            if (i == nums.length) {
                return i;
            }
            return -1;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:LeetCode 每日一题 [67] 0~n-1中缺失的数字

          本文链接:https://www.haomeiwen.com/subject/qcihzhtx.html