题解 | #缺失数字#

缺失数字

http://www.nowcoder.com/practice/9ce534c8132b4e189fd3130519420cde

思路
方法1:利用等差数列递推公式
图片说明
题目明确指出所给的数据在0~n之间,且所有数值均只出现一次,而对于数列求和有求和公式 图片说明
故,可以遍历整个数组求出总和sum1,再借助上述求和公式计算在不缺失数字的情况下的总和sum2,sum2-sum1即为所缺失的数字。

方法2:二分
前面两种方法的时间复杂度都是,但是题目给我们的要求是能不能用来解决这道题目呢?
其实我们看到这个时间复杂度,最容易想到的就是二分查找。其实主要还是利用下标与值相等这个条件,去维护左右边界,然后最终找到缺失的那个数字。
图片说明

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 找缺失数字
     * @param a int整型一维数组 给定的数字串
     * @return int整型
     */
    public int solve (int[] a) {

//         return method1(a);

        return method2(a);
    }

    public int method1 (int[] a) {
        int aLen = a.length;
        int presum = aLen * (aLen + 1) / 2;
        int sum = 0;
        for (int i=0;i<aLen;i++)
            sum += a[i];
        return presum - sum;
    }

    public int method2 (int[] a) {

        int left = 0;
        int right = a.length - 1;

        while (left <= right) {

            int mid = left + (right - left) / 2;

            if (a[mid] == mid) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }


            }
        return left;
        }
    }
刷刷题 文章被收录于专栏

刷刷题 活跃活跃脑细胞

全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 11:15
点赞 评论 收藏
分享
哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务