2.数据结构面试题--消失的数字

简介: 2.数据结构面试题--消失的数字

面试题:消失的数字

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

方法1.排序:依次查找

如果下一个数不是上一个数+1,那么上一个数字+1就是消失的数字

冒泡排序的话时间复杂度是O(n^2)

qsort排序的话是O(NlogN)
需要用一个循环来判断如果下一个数不是上一个数+1,那么上一个数字+1就是消失的数字,准确地来说时间复杂度是O(N
logN+N),最后的N可以忽略掉,所以时间复杂度是O(N*logN).

时间复杂度都不满足题目的要求,所以这道题目不能使用排序

方法2.异或:相异为1,相同为0

思路分析

用一个数字x跟0~n的数字异或,再和缺失数字的数组异或

异或的特点:

参与运算的两个值,如果两个值相同,则结果为1,不同为1

(1)0 ^ 0=0 0 ^ 1=1

0和任何数异或=任何数

(2)1^0=1 1 ^1=0

1异或任何数=任何数取反

(3)任何数异或自己相当于把自己本身置0

题目分析:

1.将x置为0,让它去异或现有的缺失数字的数组里面的各个数字,结果保存到x中

2.再用上一步得到的x去异或原本完整的数组里面的各个元素,根据异或的特点,相同的两个数之间异或结果为0,那么最终两个数组相同的数字异或完之后剩下0去异或原来完整的数组中没有匹配到的数字(也就是消失的数字),结果就是消失的数字

画图讲解:

0 1 2 3 4 5 6 7 8 9

假设x就是消失的数字

假设x=0

0和任何数字异或,结果是任何数

先和第一个缺失数字的数组异或,遍历数组的时间复杂度是O(N)

再和第二个完整的数组异或,时间复杂度是O(N+1)

总的来说这个方法的时间复杂度是O(N+N+1)也就是O(2*N+1)

时间复杂度实际上还是O(N)

注意:

异或满足交换律

1 1 2异或和1 2 1 异或的结果相同

int missingNumber(int* nums, int numsSize) {
  int x = 0; //和数组里面的每个值异或
  for (int i = 0; i < numsSize; ++i)
  {
    x ^= nums[i];
  }
  for (int i = 0; i < numsSize; i++) {
    x ^= i;
  }
  return x;
}

方法3.0-N等差数列计算完整数组的和,减去缺失数字的数组里面的各个数字

等差数列求和的时间复杂度是O(1)

减数组里面的值需要遍历一遍,时间复杂度是O(N)

这个方法的时间复杂度是O(N+1)也就是O(N)

#include<stddef.h>   //size_t是C标准在stddef.h中定义的,size_t类型表示C中任何对象所能达到的最大长度,它是无符号整数
//size_t在32位系统上定义为unsigned int,也就是32位无符号整型.
//size_t在64位系统上定义为unsigned int,也就是64位无符号整型.
int missingNumber(int* nums, int numsSize) {
  int x = (0 + numsSize) * (numsSize+1) / 2;
  for (size_t i = 0; i < numsSize; i++) {
    x -= nums[i];
  }
  return x;
}
相关文章
|
1月前
|
算法 前端开发 Java
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
这篇文章总结了单链表的常见面试题,并提供了详细的问题分析、思路分析以及Java代码实现,包括求单链表中有效节点的个数、查找单链表中的倒数第k个节点、单链表的反转以及从尾到头打印单链表等题目。
33 1
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
|
4月前
【数据结构OJ题】消失的数字
力扣题目——消失的数字
44 0
【数据结构OJ题】消失的数字
|
5月前
|
Java Android开发 Kotlin
Android面试题:App性能优化之Java和Kotlin常见的数据结构
Java数据结构摘要:ArrayList基于数组,适合查找和修改;LinkedList适合插入删除;HashMap1.8后用数组+链表/红黑树,初始化时预估容量可避免扩容。SparseArray优化查找,ArrayMap减少冲突。 Kotlin优化摘要:Kotlin的List用`listOf/mutableListOf`,Map用`mapOf/mutableMapOf`,支持操作符重载和扩展函数。序列提供懒加载,解构用于遍历Map,扩展函数默认参数增强灵活性。
50 0
|
5月前
|
存储 算法 大数据
深入解析力扣170题:两数之和 III - 数据结构设计(哈希表与双指针法详解及模拟面试问答)
深入解析力扣170题:两数之和 III - 数据结构设计(哈希表与双指针法详解及模拟面试问答)
|
5月前
|
存储 算法 数据挖掘
数据结构面试常见问题:解锁10大关键问题及答案解析【图解】
数据结构面试常见问题:解锁10大关键问题及答案解析【图解】
|
5月前
|
存储 关系型数据库 MySQL
万字详细面试被吊打的总结(SE->数据结构->MYSQL)
万字详细面试被吊打的总结(SE->数据结构->MYSQL)
|
6月前
|
算法 搜索推荐 大数据
数据结构面试常见问题
V哥在工作中整理了22个常用数据结构实现与原理分析,在面试中可以帮你你充分准备
113 0
|
6月前
|
算法 搜索推荐 索引
数据结构与算法⑥(第二章OJ题,下)后八道链表面试题(下)
数据结构与算法⑥(第二章OJ题,下)后八道链表面试题
46 0
|
6月前
|
算法 程序员 索引
数据结构与算法⑥(第二章OJ题,下)后八道链表面试题(中)
数据结构与算法⑥(第二章OJ题,下)后八道链表面试题
41 0
|
6月前
|
算法 C语言 C++
数据结构与算法⑥(第二章OJ题,下)后八道链表面试题(上)
数据结构与算法⑥(第二章OJ题,下)后八道链表面试题
32 0