文章目录

  • 1. 题目
  • 2. 解题
    • 2.1 充分利用题目信息
    • 2.2 位运算
    • 2.3 二分查找

1. 题目

一个长度为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/problems/que-shi-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 充分利用题目信息

nums[i] != i,就是缺少的数 i ,都不少的话,少的就是n = nums.size()
class Solution {public:int missingNumber(vector<int>& nums) {for(int i = 0; i < nums.size(); ++i)if(nums[i] != i)return i;return nums.size();//有个例子是 [0],答案预期 1}
};

2.2 位运算

class Solution {public:int missingNumber(vector<int>& nums) {int i, ans = nums.size();for(i = 0; i < nums.size(); ++i)ans = ans^i^nums[i];return ans;}
};

2.3 二分查找

class Solution {public:int missingNumber(vector<int>& nums) {int l = 0, r = nums.size()-1, mid;while(l < r)//有等于号,则不能退出循环{mid = l+((r-l)>>1);if(nums[mid] == mid)//左边都不缺l = mid+1;else//不相等,左边肯定缺了东西,可能在当前位置r = mid;}if(nums[l] == l)//全部有序,前面全部不缺return l+1;return l;//这里写 r 也可以}
};

更简单的写法:

class Solution {public:int missingNumber(vector<int>& nums) {int l = 0, r = nums.size()-1, mid, ans;while(l <= r){mid = l+((r-l)>>1);if(nums[mid] > mid){ans = nums[mid]-1;r = mid-1;}else{ans = nums[mid]+1;l = mid+1;}}return ans;}
};

剑指Offer - 面试题53 - II. 0~n-1中缺失的数字(二分、位运算)相关推荐

  1. 剑指offer面试题53 - II. 0~n-1中缺失的数字(二分查找)

    题目描述 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 思路 详见链接 代码 ...

  2. 剑指offer | 面试题53 - II. 0~n-1中缺失的数字

    转载本文章请标明作者和出处 本文出自<Darwin的程序空间> 本文题目和部分解题思路来源自<剑指offer>第二版 开始行动,你已经成功一半了,献给正在奋斗的我们 题目 一个 ...

  3. 剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)

    /*** 剑指 Offer 53 - II. 0-n-1中缺失的数字* @author wsq* @date 2020/10/08一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在 ...

  4. [剑指offer]面试题第[53-2]题[JAVA][0-n-1中缺失的数字][二分法][暴力法]

    [问题描述][简单] 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字.示例 1:输 ...

  5. 【算法】剑指 Offer 53 - II. 0~n-1中缺失的数字

    1.概述 剑指 Offer 53 - II. 0-n-1中缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一 ...

  6. LeetCode-剑指 Offer 53 - II. 0~n-1中缺失的数字

    剑指 Offer 53 - II. 0-n-1中缺失的数字 思路一:简单for循环找 class Solution {public:int missingNumber(vector<int> ...

  7. leetcode剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)

    一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 示例 1: 输入: [0,1,3 ...

  8. 53 - II. 0~n-1中缺失的数字

    链接 https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof/ 难度: #简单 题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且 ...

  9. 剑指offer面试题53 - I. 在排序数组中查找数字 I(二分查找)

    题目描述 统计一个数字在排序数组中出现的次数. 思路 详见链接 代码 class Solution:def search(self,nums:[int],target:int)->int:i, ...

最新文章

  1. 第二届中国云计算应用论坛圆满落幕
  2. istringstream
  3. use vue 多个_vue.use 插件系统详解
  4. 第三篇——第二部分——第一文 SQL Server镜像简介
  5. LeetCode 339. 嵌套列表权重和(DFS)
  6. 程序员面试金典 - 面试题 17.18. 最短超串(双指针+哈希)
  7. 机器学习模型的可解释性
  8. 软考信息安全工程师备考笔记2:第二章密码学基础与应用备考要点
  9. Eclipse Java Build Path详解
  10. matlab三维货位图,遗传算法求三维立体仓库货位优化MATLAB源码
  11. 丰巢拒绝放弃超时收费:不想用,可以别用
  12. 处理quartz 异常 Couldn‘t retrieve trigger: No record found for selection of Trigger with key:
  13. mysql监控 代码审计_Seay源代码审计系统2.1及源码开放 人人都是代码审计师
  14. msr830路由器配置虚拟服务器,华三MSR系列路由器(V7)平台家庭宽带配置IPV6
  15. win7系统中如何以管理员身份修改hosts文件
  16. 【机器学习】机器学习常见符号
  17. 旧电脑搭建linux服务器
  18. Java 保姆级教程——3.添加地图,地图根据人物移动
  19. 一个葫芦娃的小程序,爷青回!
  20. freemarker生成word文件,word文件打不开解决方法。

热门文章

  1. 深入浅出mysql gtid_深入理解MySQL GTID
  2. 软件测试工程师核心竞争力(转)
  3. [笔记] FireDAC DataSet 导入及导出 JSON
  4. Linux 系统版本信息
  5. 【收集】Python 微优化
  6. 单链表的初始化,整表创建,单个元素插入,单个元素删除,整表删除等操作...
  7. Mysql 导入导出数据结构及数据
  8. 基于Silverlight+WCF的SAAS开发平台TAP(二)之核心技术
  9. 重庆大二学生花了6年写出了操作系统
  10. 从单片机步入Linux之运行地址与加载地址