剑指Offer - 面试题53 - II. 0~n-1中缺失的数字(二分、位运算)
文章目录
- 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中缺失的数字(二分、位运算)相关推荐
- 剑指offer面试题53 - II. 0~n-1中缺失的数字(二分查找)
题目描述 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 思路 详见链接 代码 ...
- 剑指offer | 面试题53 - II. 0~n-1中缺失的数字
转载本文章请标明作者和出处 本文出自<Darwin的程序空间> 本文题目和部分解题思路来源自<剑指offer>第二版 开始行动,你已经成功一半了,献给正在奋斗的我们 题目 一个 ...
- 剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)
/*** 剑指 Offer 53 - II. 0-n-1中缺失的数字* @author wsq* @date 2020/10/08一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在 ...
- [剑指offer]面试题第[53-2]题[JAVA][0-n-1中缺失的数字][二分法][暴力法]
[问题描述][简单] 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字.示例 1:输 ...
- 【算法】剑指 Offer 53 - II. 0~n-1中缺失的数字
1.概述 剑指 Offer 53 - II. 0-n-1中缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一 ...
- LeetCode-剑指 Offer 53 - II. 0~n-1中缺失的数字
剑指 Offer 53 - II. 0-n-1中缺失的数字 思路一:简单for循环找 class Solution {public:int missingNumber(vector<int> ...
- leetcode剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 示例 1: 输入: [0,1,3 ...
- 53 - II. 0~n-1中缺失的数字
链接 https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof/ 难度: #简单 题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且 ...
- 剑指offer面试题53 - I. 在排序数组中查找数字 I(二分查找)
题目描述 统计一个数字在排序数组中出现的次数. 思路 详见链接 代码 class Solution:def search(self,nums:[int],target:int)->int:i, ...
最新文章
- 第二届中国云计算应用论坛圆满落幕
- istringstream
- use vue 多个_vue.use 插件系统详解
- 第三篇——第二部分——第一文 SQL Server镜像简介
- LeetCode 339. 嵌套列表权重和(DFS)
- 程序员面试金典 - 面试题 17.18. 最短超串(双指针+哈希)
- 机器学习模型的可解释性
- 软考信息安全工程师备考笔记2:第二章密码学基础与应用备考要点
- Eclipse Java Build Path详解
- matlab三维货位图,遗传算法求三维立体仓库货位优化MATLAB源码
- 丰巢拒绝放弃超时收费:不想用,可以别用
- 处理quartz 异常 Couldn‘t retrieve trigger: No record found for selection of Trigger with key:
- mysql监控 代码审计_Seay源代码审计系统2.1及源码开放 人人都是代码审计师
- msr830路由器配置虚拟服务器,华三MSR系列路由器(V7)平台家庭宽带配置IPV6
- win7系统中如何以管理员身份修改hosts文件
- 【机器学习】机器学习常见符号
- 旧电脑搭建linux服务器
- Java 保姆级教程——3.添加地图,地图根据人物移动
- 一个葫芦娃的小程序,爷青回!
- freemarker生成word文件,word文件打不开解决方法。