414. 第三大的数(点击查看原题)

给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。

示例 1:

输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.

示例 2:

输入: [1, 2]输出: 2解释: 第三大的数不存在, 所以返回最大的数 2 .

示例 3:

输入: [2, 2, 3, 1]输出: 1解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。

解题思路

1第一要判断是否有三个及以上不同的值。首先设置三个变量temp1、2、3,将它们都赋值为数组的第一个数,然后在找到第一个不等于temp1的值时将其赋值给temp2则temp1、2就不同了,再遇到与temp1不同的值时将其赋值给temp3,可能会存在temp2与temp3相等的情况,不过会在最后判断temp1、2、3是否相等,现在不用管它。
2.第二要找到并保存前三大的数。将max、second、third都赋值为INT_MIN,表示最小的整数。判断nums[i]是否大于max,若大于则分别把原second变成third,原max变成second;若不大于max,判断是否大于second,若大于则将原second变成third;若不大于second,判断是否大于third。

实现代码

int thirdMax(int* nums, int numsSize){int max=INT_MIN,second=INT_MIN,third=INT_MIN;     //存放前三大数, INT_MIN=-2^31表示最小的数int temp1=nums[0],temp2=nums[0],temp3=nums[0];   //判断是否存在三个及以上不同的数for(int i=0;i<numsSize;i++){if(temp1!=nums[i])              //当不等于temp1时{if(temp1!=temp2)           //当temp1、2不等,则将nums赋值给temp3,而可能存在temp2==temp3情况,在最后会进行判断{            temp3 = nums[i];}else                     //如果temp1、2相等时就把nums赋值给temp2,就不等了{temp2 = nums[i];   }}if(nums[i]>max)      //如果大于最大值{third =second;      //把第二大值赋给第三大值second = max;        //最大值赋给第二大值max = nums[i];       //把新值赋给最大值}else if(nums[i]>second && nums[i]<max)    //如果大于第二大值且小于最大值,条件一定要写全{third = second;second = nums[i];}else if(nums[i]>third && nums[i]<second && nums[i]<max)   {third = nums[i];}}if(temp2==temp3 || temp1==temp3 )        //如果temp2等于temp3或temp1等于temp3,证明不存在三个或以上不同的数{return max;       } else         {return third;}
}

参考自:C 414. 第三大的数

Leetcode 414. 第三大的数(详解 C语言实现)相关推荐

  1. leetcode 414.第三大的数

    leetcode 414.第三大的数 题目描述 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1] ...

  2. [Leetcode] 414. 第三大的数

    题目描述: 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1]输出: 1解释: 第三大的数是 1. ...

  3. LeetCode Algorithm 414. 第三大的数

    414. 第三大的数 Ideas emmmm,内置排序算法YYDS,三行代码解决. Code C++ class Solution {public:int thirdMax(vector<int ...

  4. 健身三大供能系统详解

    ( 题图来源:http://digitaltrends.com ) 注:这周写肌肉类型的解析,写到一半,发现还是需要把这篇<三大供能系统详解>放上来先,生理学的东西太多涉及到供能系统.这篇 ...

  5. JS逆向之补环境过瑞数详解

    JS逆向之补环境过瑞数详解 "瑞数" 是逆向路上的一座大山,是许多JS逆向者绕不开的一堵围墙,也是跳槽简历上的一个亮点,我们必须得在下次跳槽前攻克它!! 好在现在网上有很多讲解瑞数 ...

  6. SL651-2014 《水文监测数据通信规约》 人工置数详解

    SL651-2014 <水文监测数据通信规约> 人工置数详解 全国水文标准化技术委员会水文仪器分技术委员会为适应我国水文仪器标准化工作的迅速发展,对用来监测河流.水库等水情的水文遥测终端R ...

  7. IIS连接数、并发连接数、最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数详解

    IIS:连接数.并发连接数.最大并发工作线程数.应用程序池的队列长度.应用程序池的最大工作进程数详解 iis性能指标的各种概念:连接数.并发连接数.最大并发工作线程数.应用程序池的队列长度.应用程序池 ...

  8. php 时间格式 毫秒,php获取当前时间的毫秒数详解

    php获取当前时间的毫秒数详解 var runtimes = 0; function GetRTime(){ var nMS = <?php echo $lefttime; ?>*1000 ...

  9. php怎么求最小公倍数,C++_详解C语言求两个数的最大公约数及最小公倍数的方法,求两个正整数的最大公约数nbs - phpStudy...

    详解C语言求两个数的最大公约数及最小公倍数的方法 求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y) ...

最新文章

  1. 《C程序设计语言》读书笔记----习题1-21
  2. optee的启动过程
  3. 决策树之 C4.5 算法
  4. 2018年中国研究生数学建模竞赛--经验贴
  5. 敏捷软件开发:原则、模式与实践(C#版)
  6. 争时金融java_Java高并发编程基础之AQS
  7. 安全测试===sqlmap(壹)转载
  8. 利用百度云解压需要密码的资源(需要高级会员
  9. 【XS128】Link error L1822 symbol _FADD / _FSUB/ _FDIV/ _FMUL.....错误解决的方法
  10. matlab 中norm函数的用法
  11. 惠普磁带备份机支持备份几台服务器,HP 磁带机和 Tapeware 备份软件
  12. Vue仿支付宝首页(更多)添加、删除、拖拽、点击等功能
  13. 计算今天是本学期第几周
  14. 紧急大项目的应付手法
  15. 一学期c语言的学习总结
  16. Chapter9 : De Novo Molecular Design with Chemical Language Models
  17. 收废品小程序的推广策略与实践
  18. LightWave 3D 2019 for Mac(三维动画制作软件)
  19. Mock 模拟测试简介及 Mockito 使用入门
  20. html无法显示图片解决方法

热门文章

  1. 电脑桌面图标变成白色图标如何处理
  2. Android仿抖音APP
  3. 被遗忘的黑莓,你还活得好么?
  4. 数据万象技术演进之路
  5. tank game V0.1
  6. 渗透测试|移动端 nexus 6p 刷入8.1和获取root权限(magisk)
  7. 当基础设施故障后,声网 SD-RTN 如何保障 RTE 服务的高可用性
  8. 【Python爬虫学习】七、淘宝商品价格爬取(成功爬取)
  9. 一种值得借鉴的设计思路
  10. 17.AD域和LDAP协议