每日一练(25): 0~n-1中缺失的数字

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

一个长度为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


限制:


1 <= 数组长度 <= 10000


来源:力扣(LeetCode)


链接:https://leetcode-cn.com/probl...


方法一:二分查找


二分求边界,其实就是求数组中等于target的元素的范围边界,如果数组中不存在等于target的元素,那求得的左右边界的值就是一样的。


int missingNumber(vector<int>& nums) {
    int l = 0;
    int r = nums.size();
    int m = 0;
    while (l < r) {        //二分查找
        m = (l + r) / 2;
        if (nums[m] == m) {
            l = m + 1;
        } else {
            r = m;    //得到缺失的那个数
        }
    }
    return r;
}


方法二:数学法(等差数列)


数组有n个数,但0到n有n+1个数,根据等差数列求和可得sum = (0+n)*(n+1)/2

然后总和减去数组所有数,就是缺失的那个数


int missingNumber(vector<int>& nums) {
    int n = nums.size();
    int sum = (0 + n)*(n + 1) / 2;    //等差数列求和
    for (int i : nums) {
        sum -= i;    //总和减去数组所有数,就是缺失的那个数
    }
    return sum;
}
目录
相关文章
|
JavaScript 前端开发
kettle从sftp下载多个文件并进行转换后输出
kettle从sftp下载多个文件并进行转换后输出
|
JavaScript 前端开发 程序员
用Unity不会几个插件怎么能行?Unity各类插件及教程推荐
话说工欲善其事必先利其器,程序员总是有一些开发利器,而对于Unity3D开发程序员来说,插件就是非常好用的利器。 今天博主,就将比较好用的插件推荐给大家,希望一起学习品鉴。
|
存储 Java API
如何使用 Java 中的 API 更改 PDF 纸张大小
如何使用 Java 中的 API 更改 PDF 纸张大小
245 11
|
机器学习/深度学习 人工智能
深度学习之音乐生成与风格转换
基于深度学习的音乐生成与风格转换是近年来人工智能领域的一个热门研究方向,涉及利用深度学习技术生成音乐作品或将音乐从一种风格转换为另一种风格。这种技术可以自动化创作过程,同时保持音乐的艺术性和风格特征,广泛应用于娱乐、音乐制作、交互式音乐生成等多个场景。
253 1
|
机器学习/深度学习 算法 数据可视化
【机器学习】分类与预测算法的评价与优化
【机器学习】分类与预测算法的评价与优化
254 0
|
Java 编译器 Apache
Java语言中的import语句:深入解析与应用
Java语言中的import语句:深入解析与应用
1281 0
|
负载均衡 网络协议 中间件
掌握 SOME/IP :访问进程数据 构建高效通信系统的关键技术
掌握 SOME/IP :访问进程数据 构建高效通信系统的关键技术
594 2
|
定位技术
R语言raster包计算多个栅格图像平均值、标准差的方法
R语言raster包计算多个栅格图像平均值、标准差的方法
356 1
Visual Studio 2019 设置程序结束控制台不关闭
修改设置使控制台应用运行结束,控制台不自动退出。
945 0
Visual Studio 2019 设置程序结束控制台不关闭