面试题 17.04. 消失的数字

简介: 面试题 17.04. 消失的数字

题目描述

点击直达题目链接

解题思路1另开辟一个数组,重新开辟的数组长度比原来的大一。里面的元素都初始化为-1,原数组里面的元素对应从新开辟数组的下标

代码

int missingNumber(int* nums, int numsSize){
  int* num=(int*)malloc((numsSize+1)*sizeof(int));
  int i=0;
  for(i=0;i<numsSize+1;i++)
  {
      num[i]=-1;
  }
  for(i=0;i<numsSize;i++)
  {
       num[nums[i]]=nums[i];
  }
  for(i=0;i<numsSize+1;i++)
  {
      if(num[i]==-1)
      break;
  }
  free(num);
  num=NULL;
  return i;
}

解题思路2

  • 用数字0把数组里面的元素全部异或^,同时和0—N(N为原数组长度)的数字再次进行异或,结果就是缺少的数。

代码

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

解题思路3

  • 0到n的数全部进行相加,然后减去数组里面的数
  • 虽然可以通过,但是数组长度过大时,会有越界的风险

代码

int missingNumber(int* nums, int numsSize){
    int i=0,x=0;
    for(i=0;i<numsSize;i++)
    {
        x+=i;
        x-=nums[i];
    }
    return x+numsSize;
}
相关文章
|
7月前
消失的数字
消失的数字
24 0
|
1月前
|
C语言
【05】消失的数字
【05】消失的数字
|
1月前
Leecode之面试题消失的数字
Leecode之面试题消失的数字
|
1月前
每日一题——找到消失的数字
每日一题——找到消失的数字
|
1月前
|
算法 Java
刷题专栏(二十八):找到所有数组中消失的数字
刷题专栏(二十八):找到所有数组中消失的数字
104 4
|
1月前
leetcode-面试题 17.19:消失的两个数字
leetcode-面试题 17.19:消失的两个数字
44 0
|
11月前
解 消失的数字
解 消失的数字
|
1月前
|
索引
leetcode-448:找到所有数组中消失的数字
leetcode-448:找到所有数组中消失的数字
22 0
|
8月前
【Leetcode -面试题17.04.消失的数字 -189.轮转数组】
【Leetcode -面试题17.04.消失的数字 -189.轮转数组】
26 0