Leetcode每日一题——“消失的数字”

简介: Leetcode每日一题——“消失的数字”

各位CSDN的uu们你们好呀,今天,小雅兰又开新专栏了,以后会在Leetcode上面进行刷题,尽量每天写一道,请大家监督我!!!好啦,让我们进入Leetcode的世界吧


力扣

7a3e3d9ec9784d9d9098f80850bccca1.png对于这道题目,有很多种解法,接下来就由小雅兰来你们细细剖析!!!


解法一:


排序,依次查找,如果下一个数不是上一个数+1,那么上一个数+1就是消失的数字!!!


但是这种方法,时间复杂度过高,不符合力扣的要求


利用冒泡排序的话,时间复杂度为O(N^2)


利用qsort(快速排序)的话,时间复杂度为O(N*logN)


但是这道题目要求时间复杂度为O(N)


那么,这种方法就不行,那这种方法小雅兰就不写这种方法的代码啦


解法二:


异或  相同为0,相异为1


首先,把x赋值为0

for循环,让x和nums数组的每一个元素异或

然后又一个for循环,让x和0到numsSize的数字异或

最后的答案就是只出现一次的数字

最后异或的结果就是我们要求的消失的数字

int missingNumber(int* nums, int numsSize)
{
  int i=0;
  int x=0;
  for(i=0;i<numsSize;i++)
  {
     x^=nums[i];
  }
  for(i=0;i<numsSize+1;i++)
  {
      x^=i;
  }
  return x;
}

解法三:

利用数学公式

等差数列求前n项和的公式为:Sn=n*(n+1)/2

求完和之后,减去nums数组中的所有的值,最后结果就是消失的数字啦

int missingNumber(int* nums, int numsSize)
{
  size_t i=0;
  int x=numsSize*(1+numsSize)/2;
  for(i=0;i<numsSize;i++)
  {
      x-=nums[i];
  }
  return x;
}

d8e8feda12e64b98b0073180b659ef4f.png

好啦,小雅兰今日刷题经验就到这里啦,还要继续加油噢!!!

aa8a7dc144e04d0ea537822500c07d4b.jpg

相关文章
|
19天前
|
机器学习/深度学习 C语言
LeetCode | 17.04.消失的数字和189.旋转数组
17.04.消失的数字 OJ链接 这里题目要求在时间复杂度上O(n)我们介绍三种方法,看看哪种方法适合这道题~~
|
19天前
|
机器学习/深度学习
leetcode:面试题 17.04. 消失的数字(找单身狗/排序/公式)
leetcode:面试题 17.04. 消失的数字(找单身狗/排序/公式)
23 0
|
7月前
|
C语言
(C语言)力扣 17.04. 消失的数字
(C语言)力扣 17.04. 消失的数字
32 0
|
8月前
【Leetcode -441.排列硬币 -448.找到所有数组中消失的数字】
【Leetcode -441.排列硬币 -448.找到所有数组中消失的数字】
27 0
|
12天前
|
C语言
LeetCode---消失的数字---C语言实现
LeetCode---消失的数字---C语言实现
|
19天前
leetcode-面试题 17.19:消失的两个数字
leetcode-面试题 17.19:消失的两个数字
40 0
消失的数字,旋转数组(leetcode 一题多解)
消失的数字,旋转数组(leetcode 一题多解)
|
7月前
|
存储
LeetCode题:88合并两个有序数组,283移动零,448找到所有数组中消失的数字
LeetCode题:88合并两个有序数组,283移动零,448找到所有数组中消失的数字
50 0
|
8月前
【Leetcode -面试题17.04.消失的数字 -189.轮转数组】
【Leetcode -面试题17.04.消失的数字 -189.轮转数组】
24 0
|
10月前
|
C语言
ARTS 挑战打卡的第2天 --- leetcode消失的数字(Algorithm)
ARTS 挑战打卡的第2天 --- leetcode消失的数字(Algorithm)
36 0