leetcode算法 每日一题(17.04消失的数字)day 1

简介: 今天开始小编开始给大家带来算法题目的讲解,首先我们看题目描述

今天开始小编开始给大家带来算法题目的讲解,首先我们看题目描述


image.png


这里我们有三种思路,首先是比较常规的方法,也是大家比较常见的,这里我们开辟一块空间,对这个数组出现的数,进行标记,然后通过判断找到缺失的那个数,这里的时间复杂度是O(N)。


int missingNumber(int* nums, int numsSize){
   int *arr=(int*)calloc(numsSize+1,sizeof(int));
   int i=0;
   for(i=0;i<numsSize;i++)
   {
       arr[nums[i]]++;
   }
   for(i=0;i<numsSize;i++)
   {
       if(arr[i]==0)
       {
         break;
       }
   }
   return i;
}

image.png



思路二,这里我们就要利用^操作符的一个特性,这里我直接给大家结论,推导过程我会在操作符的介绍时具体讲解。结论是:


1.a^a=0


2.0^a=a


接下来直接给大家上代码


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

这里最后得到的val就是那个缺失的数字。



image.png


思路三,这里我们就要基于数组本身出发,利用该和形式相减得到那个缺失的数字


代码如下:

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

这里也是完美通过。




image.png

相关文章
|
29天前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
44 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
1月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
37 6
|
1月前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
46 2
|
1月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
37 1
|
1月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
35 1
|
1月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
60 0
|
1月前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
32 0
|
1月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
43 0
|
1月前
|
存储 算法 Java
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
19 0
|
1月前
|
算法 Java 索引
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
28 0