日拱一卒,月进一步(11)

简介: 414. 第三大的数 - 力扣(LeetCode)

414. 第三大的数 - 力扣(LeetCode)

思路一:


先用qsort函数,将数组的元素从小到大排序。qsort(首元素地址,元素个数,字节数,比较函数)


再用differ标记不同的元素个数当前一个元素不等于后面一个元素,differ++,当differ等于2时候,且此时后一个元素仍然不等于前一个元素,就说明这个数字是第三大的元素。

int cmp(const void*a,const void*b)
{
    return *(int*)a<*(int*)b;
}
 
int thirdMax(int* nums, int numsSize){
     qsort(nums,numsSize,sizeof(nums[0]),cmp);
     int differ=0;
     for(int i=1;i<numsSize;i++)
     {
        if(nums[i]!=nums[i-1]&&++differ==2)//必须满足前一个数不等于后面的数,diff才能++
        {
            return nums[i];
        }
     }
     return nums[0];
}

思路二:

int thirdMax(int* nums, int numsSize){  
    // 初始化三个变量为 LONG_MIN,这是 long 类型可以表示的最小值。  
    // 这样做是为了确保在数组中即使存在负数,这些变量也能被正确地更新。  
    long first  = LONG_MIN;  
    long second = LONG_MIN;  
    long third  = LONG_MIN;  
  
    // 遍历数组中的每一个元素  
    for (int i = 0; i < numsSize; i++) {  
        // 如果当前元素比 first(当前已知的最大值)还要大  
        if (nums[i] > first) {  /* nums[i] > a */  
            // 更新 third、second 和 first  
            // 注意这里的更新顺序,确保了在更新时不会丢失之前的信息  
            third  = second;  
            second = first;  
            first  = nums[i];  
        }   
        // 如果当前元素比 second 大但比 first 小  
        else if (nums[i] > second && nums[i] < first) { /* a > nums[i] > b */  
            // 更新 third 和 second  
            third  = second;  
            second = nums[i];  
        }   
        // 如果当前元素比 third 大但比 second 小  
        else if (nums[i] > third && nums[i] < second) { /* b > nums[i] > c */  
            // 更新 third  
            third = nums[i];  
        }  
    }  
  
    // 如果 third 仍然是 LONG_MIN,说明数组中不存在三个不同的数,或者最大值和次大值重复出现多次  
    // 此时返回 first(即最大值)作为默认结果(尽管它可能不是第三大的数,但题目没有明确要求在这种情况下应该返回什么)  
    return (third == LONG_MIN) ? first : third;  
}

448. 找到所有数组中消失的数字 - 力扣(LeetCode)


有些元素出现了一次,有的元素没有出现过,要求找到没有出现过的数字。


我们可以利用数组nums本身的索引和值之间的关系来找到缺失的数字。由于nums[i]的范围是[1, n],我们可以将nums[i]的值映射到索引nums[i] - 1上,并将该索引处的元素取反(或者做其他标记,比如加上一个固定的值)。然后,我们再次遍历数组,找到那些未被取反(或未被标记)的索引,它们对应的值就是缺失的数字。

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){
    int*result=(int*)malloc(numsSize*sizeof(int));
    *returnSize=0;
    for(int i=0;i<numsSize;i++)
    {
        int index=nums[i]-1;
        if(index>=0&&index<numsSize)
        {
            nums[index]=-nums[index];//取反或者标记
        }
    }
     for(int i=0;i<numsSize;i++)
     {
        if(nums[i]>0)
        {
            result[(*returnSize++)]=i+1;//索引+1得到缺失的数字
        }
     }
     return result;
}
相关文章
|
Linux Shell
【linux】字符串操作(一)
【linux】字符串操作(一)
155 0
|
数据采集 机器学习/深度学习 数据可视化
使用Jupyter Notebook进行数据分析:入门与实践
【6月更文挑战第5天】Jupyter Notebook是数据科学家青睐的交互式计算环境,用于创建包含代码、方程、可视化和文本的文档。本文介绍了其基本用法和安装配置,通过一个数据分析案例展示了如何使用Notebook进行数据加载、清洗、预处理、探索、可视化以及建模。Notebook支持多种语言,提供直观的交互体验,便于结果呈现和分享。它是高效数据分析的得力工具,初学者可通过本文案例开始探索。
1080 3
|
11月前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
754 99
|
11月前
|
存储 人工智能 弹性计算
产品技术能力飞跃,阿里云E-HPC荣获“CCF 产品创新奖”!
9月24日,在中国计算机学会举办的“2024 CCF全国高性能计算学术年会”中,阿里云弹性高性能计算(E-HPC)荣获「CCF HPC China 2024产品创新奖」。这也是继2022年之后,阿里云E-HPC再次荣获此奖项,代表着阿里云在云超算领域的持续创新结果,其产品能力和技术成果得到了业界的一致认可。
|
人工智能 监控 供应链
信息系统项目管理师重点内容汇总(第十三天)
【2月更文挑战第2天】乘风破浪会有时,直挂云帆济沧海
1073 5
信息系统项目管理师重点内容汇总(第十三天)
|
机器学习/深度学习
详解分支和循环结构(剖析if语句,switch语句,while循环,for循环,do-while循环)
详解分支和循环结构(剖析if语句,switch语句,while循环,for循环,do-while循环)
185 0
|
缓存
创建本地yum源并安装tree命令(openEuler-20.03-LTS-SP3)
创建本地yum源并安装tree命令(openEuler-20.03-LTS-SP3)
1008 1
|
监控 前端开发 Java
Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning an alias in ‘reader‘, line 5
Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning an alias in ‘reader‘, line 5
269 0
|
机器学习/深度学习 人工智能 自然语言处理
悦数图数据库:图技术和 AI 在金融行业的应用及技术前瞻
一起来看看 Graph 和 AI 结合金融领域的案例以及悦数图数据库在做的一些大语言模型及前沿技术工具。
悦数图数据库:图技术和 AI 在金融行业的应用及技术前瞻
|
弹性计算 负载均衡
应用型负载均衡ALB最佳实践测评
[应用型负载均衡ALB最佳实践测评](应用型负载均衡ALB最佳实践测评) # 实验架构 **本次是使用应用型负载均衡ALB来进行典型的HTTP流量负载场景演示,下面会向您演示ALB的最佳使用方法,让您通过本篇文章掌握ALB的基础使用方法**
354 1
应用型负载均衡ALB最佳实践测评