解 消失的数字

简介: 解 消失的数字

题目:

消失的数字

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

示例:

输入【3,0,1】

输出:2

解答:

想法1:先排序后查找

但一个排序耗费的时间就不符合O(n),最快的排序O(n*logn)。(注意二分查找的基础是已经排好序的数组!)

想法2:相加再相减

把0~N加到一起再减去数组中的数,即可求得,并且时间复杂度就是O(n)

源码:

#include<iostream>
using namespace std;
int main()
{
int num[6] = { 3,6,4,1,5 };
int sum1 = 0;
int sum2 = 0;
for (int i=1;i<=6;i++)
  {
sum1 += i;
  }
for (int i=0;i<5;i++)
  {
sum2 += num[i];
  }
cout << sum1 - sum2 << endl;
return 0;
}

想法3:异或处理(O(n))

^对二进制位进行计算,

^的一些重要性质

  • 相同为0,相异为1.
  • 0跟任何数^都为那个数本身(这个性质可以把0看成桥梁!)
  • 两个相同的数进行异或,结果就是0
  • 异或满足结合律和交换律

我们无法将两个数组同时进行异或,但我们可以用0先跟第一个数组异或,然后用这个结果与另外一个数组进行异或,效果相同

源码:

int main()
{
int num[5] = { 1,2,5,4 };
int a = 0;
for (int i=0;i<4;i++)
  {
a ^= num[i];
  }
for (int i=1;i<=5;i++)
  {
a ^= i;
  }
cout << a << endl;
return 0;
}
相关文章
|
机器学习/深度学习 算法 Python
探索机器学习中的梯度下降优化算法
【8月更文挑战第1天】在机器学习的广阔天地里,梯度下降法如同一位勇敢的探险家,指引我们穿越复杂的数学丛林,寻找模型参数的最优解。本文将深入探讨梯度下降法的核心原理,并通过Python代码示例,展示其在解决实际问题中的应用。
185 3
|
SQL Java Apache
Flink CPU问题之CPU较低如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
存储 人工智能 算法
C语言笔试训练【第九天】
C语言笔试训练【第九天】
|
JSON 数据可视化 JavaScript
python--转换wrf输出的风场数据为网页可视化的json格式
python--转换wrf输出的风场数据为网页可视化的json格式
python--转换wrf输出的风场数据为网页可视化的json格式
(力扣)面试题56 - I. 数组中数字出现的次数
(力扣)面试题56 - I. 数组中数字出现的次数
56 0
|
编译器 Linux C++
C++多态
C++多态
|
JavaScript 前端开发
🍉JavaScript进阶——闭包与递归的那些事儿
🍉JavaScript进阶——闭包与递归的那些事儿
226 6
🍉JavaScript进阶——闭包与递归的那些事儿
|
Java Maven 数据安全/隐私保护
Maven学习(四)
Maven学习
90 0
|
存储 安全 Apache
为什么我们需要Logstash,Fluentd等日志摄取器?
Fluent-Bit旨在成为日志收集和加工的通用瑞士军刀, 同时Fluent Bit在设计时考虑了性能和低资源消耗。
为什么我们需要Logstash,Fluentd等日志摄取器?
|
大数据 数据库 C++
【菜鸟看框架】——MVC+EF实现分页
【菜鸟看框架】——MVC+EF实现分页
169 0
【菜鸟看框架】——MVC+EF实现分页