当前位置:网站首页>leetcode 268. 丢失的数字(异或!!)
leetcode 268. 丢失的数字(异或!!)
2022-08-03 20:06:00 【会编程的露娜】
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
示例 1:
输入:nums = [3,0,1]
输出:2
解释:n = 3,(n为数组中元素个数)因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。
示例 2:
输入:nums = [9,6,4,2,3,5,7,0,1]
输出:8
解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。
提示:
n == nums.length
1 <= n <= 104
0 <= nums[i] <= n
nums 中的所有数字都 独一无二
进阶:你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题?
思路一:异或
首先将从0到n的所有值都异或一遍,这样算是将所有的值都记录一遍,再对数组中的每一个值异或,因为同一个数异或2次对原值没有影响,即 a ^ b ^ b =a 。
那么到最后就只剩下没有出现的那个数字了。
class Solution {
public:
int missingNumber(vector<int>& nums) {
int ans=0;
int n=nums.size();
for(int i=0;i<=n;++i)
ans^=i;
for(vector<int>::iterator it=nums.begin();it!=nums.end();++it)
ans^=(*it);
return ans;
}
};
思路二: 作差
先从0一直加到n,记录所有数都出现时的总和 sum,再将数组中的每个值都相加 he,他们的差值(sum-he)即为没有出现的数字。
class Solution {
public:
int missingNumber(vector<int>& nums) {
int sum=0,he=0;
sort(nums.begin(),nums.end());
int n=nums.size();
for(int i=0;i<=n;++i)
sum+=i;
for(vector<int>::iterator it=nums.begin();it!=nums.end();++it)
he+=(*it);
return sum-he;
}
};
思路三:排序
对数组进行排序,如果对应位置的序号和数值不相等,那么序号就是缺失的数字。
class Solution {
public:
int missingNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
int n=nums.size(),i=0;
for( ;i<n;++i){
if(i!=nums[i])
break;
}
return i; //如果是最后一个数缺失,那么循环结束条件时i==n,最后返回的也是n
}
};
边栏推荐
- 【leetcode】剑指 Offer II 009. 乘积小于 K 的子数组(滑动窗口、双指针)
- ThreadLocal详解
- 演讲议题及嘉宾重磅揭晓,TDengine 开发者大会推动数据技术“破局”
- 利用 rpush 和 blpop 实现 Redis 消息队列
- 力扣206-反转链表——链表
- 刷题错题录1-隐式转换与精度丢失
- ES6--剩余参数
- Node version switching tool NVM and npm source manager nrm
- Mapper输出数据中文乱码
- Detailed steps for tensorflow-gpu2.4.1 installation and configuration
猜你喜欢
边缘盒子+时序数据库,美的数字化平台 iBuilding 背后的技术选型
力扣707-设计链表——链表
嵌入式分享合集27
利用 rpush 和 blpop 实现 Redis 消息队列
头条服务端一面经典10道面试题解析
数据驱动的软件智能化开发| ChinaOSC
【leetcode】剑指 Offer II 008. 和大于等于 target 的最短子数组(滑动窗口,双指针)
ECCV2022 | 用于视频问题回答的视频图Transformer
转运RNA(tRNA)甲基化修饰7-甲基胞嘧啶(m7C)|tRNA-m7G
Alexa染料标记RNA核糖核酸|RNA-Alexa 514|RNA-Alexa 488|RNA-Alexa 430
随机推荐
ES6简介及let、var、const区别
WPF .cs中使用资源文件中的ControlTemplate或Style并找到控件
不要再用if-else
亚马逊云科技 Build On 2022 - AIot 第二季物联网专场实验心得
RNA-ATTO 390|RNA-ATTO 425|RNA-ATTO 465|RNA-ATTO 488|RNA-ATTO 495|RNA-ATTO 520近红外荧光染料标记核糖核酸RNA
告诉你0基础怎么学好游戏建模?
高性能计算软件与开源生态| ChinaOSC
JS 内置构造函数 扩展 prototype 继承 借用构造函数 组合式 原型式creat 寄生式 寄生组合式 call apply instanceof
Mapper输出数据中文乱码
阿洛的反思
dpkg强制安装软件
钱江摩托某型号产品ECU货不对版 消费者知情权应如何保障?
深入理解JVM-内存结构
若依集成easyexcel实现excel表格增强
List类的超详细解析!(超2w+字)
单调栈及其应用
涨薪5K必学高并发核心编程,限流原理与实战,分布式计数器限流
从腾讯阿里等大厂出来创业搞 Web3、元宇宙的人在搞什么
2022.8.2
RNA核糖核酸修饰荧光染料|HiLyte Fluor 488/555/594/647/680/750标记RNA核糖核酸