美文网首页
面试题53_2:0-n-1中缺失的数字

面试题53_2:0-n-1中缺失的数字

作者: 繁星追逐 | 来源:发表于2019-11-12 14:24 被阅读0次

0~n-1中缺失的数

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

思路一:
分别计算0-n-1的和n*(n-1)/2
* 和数组和
* 求差

思路二:
我们知道,在缺失的元素出现前,每一个数都和数组元素的下标相等,由于一个位置缺失了元素,所以下一个位置的元素出现在其位置上,于是问题可以转化为找出第一个元素和下标不相等的位置的索引。
利用二分法查找,如果当前位置元素和索引不相等,并且前一个元素也不相等,则去左边寻找,相等则返回元素。如果当前位置元素与索引相等则去右边寻找。
代码如下:

/**
     * 二分查找
     * @param array
     * @return
     */
    public int findLoss(int[] array) {
        if (array == null) return -1;
        int low = 0;
        int len = array.length;
        int high = len -1;
        while (low <= high){
            int mid = (low+high)>>1;
            if (mid != array[mid]){
                if (mid == 0 || mid-1 == array[mid-1]){
                    return mid;
                }else {
                    high = mid-1;
                }
            }else {
                low = mid + 1;
            }
        }
        if (low == len) return len;
        //  无效的输入数组,如不是递增排序,或者有的数字超出了0~n-1的范围
        return -1;
    }

相关文章

  • 面试题53_2:0-n-1中缺失的数字

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

  • 剑指offer第二版-53.2.0~n中缺失的数字

    本系列导航:剑指offer(第二版)java实现导航帖 面试题53.2:0~n中缺失的数字 题目要求:一个长度为n...

  • LeetCode 数字与位置关系的题(268、287、448、4

    这四道题都是与数组中的数字相关的,包括找到顺序表中缺失的数字、找到顺序表中缺失的最小的正数、寻找无重复的顺序表中缺...

  • 剑指offer

    面试题3——数组中重复的数字 使用LinkedHashMap,有序存放。 面试题4——二维数组中的查找 首先选...

  • 剑指offer面试题分类总结

    数组: 面试题3:数组中重复的数字面试题4:二维数组中的查找面试题21:调整数组顺序使奇数位于偶数前面面试题39:...

  • 算法集 找出缺失的数字

    题目描述: 找出1~n的数字中缺失的两个数 代码:

  • 缺失数字

    给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。...

  • 缺失数字

    第一种方法: 这个方法是看的别人的方法,数学真的是一门好学科 还有一种方法是使用枚举,这种方法比较新颖。

  • 缺失数字

    题目:给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那...

  • 手撕数组

    【面试题51:数组中重复的数字】 【面试题32:求从1到n的整数中1出现的次数】 【面试题33:把数组排成最小的数...

网友评论

      本文标题:面试题53_2:0-n-1中缺失的数字

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