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

相关文章
|
2月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
40 0
|
22天前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
2月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
28 2
|
4月前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
70 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
4月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
52 6
|
4月前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
70 2
|
4月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
52 1
|
4月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
61 1
|
4月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
80 0
|
4月前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
43 0