面试题 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;
}
相关文章
|
搜索推荐
面试题 17.04. 消失的数字
面试题 17.04. 消失的数字
103 0
|
9月前
leetcode-面试题 17.19:消失的两个数字
leetcode-面试题 17.19:消失的两个数字
92 0
|
9月前
Leecode之面试题消失的数字
Leecode之面试题消失的数字
|
算法
leetcode算法 每日一题(17.04消失的数字)day 1
今天开始小编开始给大家带来算法题目的讲解,首先我们看题目描述
144 0
LeetCode每日一题——面试题 17.19. 消失的两个数字
给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?
91 0
|
算法 数据处理 索引
LeetCode 448. 找到所有数组中消失的数字 | 算法-从菜鸟开始
算法,从承认自己是一个菜鸟开始! 话不多说,让我们继续我们的算法之旅。
128 0
|
6月前
【刷题记录】——消失的数字、旋转数组
【刷题记录】——消失的数字、旋转数组

热门文章

最新文章