博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode-414. Third Maximum Number
阅读量:4136 次
发布时间:2019-05-25

本文共 1955 字,大约阅读时间需要 6 分钟。

题目

Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).

Example 1:

Input: [3, 2, 1]

Output: 1

Explanation: The third maximum is 1.

Example 2:
Input: [1, 2]

Output: 2

Explanation: The third maximum does not exist, so the maximum (2) is returned instead.

Example 3:
Input: [2, 2, 3, 1]

Output: 1

Explanation: Note that the third maximum here means the third maximum distinct number.

Both numbers with value 2 are both considered as second maximum.

解答

这一题看着简单,其实不是那么容易AC的。主要是需要对一些特殊的输入进行特殊处理。

注意:[2,1,1]这种情况是不存在第三大的,返回2。

用三个变量first,second,third来表示第一大,第二大,第三大。

用count来表示这三个更新次数。如果更新次数大于等于3,直接返回third。
如果小于3,那就是返回最大值。
但是有一个特殊的例子:
[2,1,-2147483648],这个在判断第三个时是不更新的,所以额外对其进行计数,用bottom来计数,在最后的判断中就用count+bottom来判断。
AC代码:9ms

class Solution {public:    int thirdMax(vector
& nums) { #define INT_MIN (-2147483647-1) int max_3[3]; if(nums.size()==1) return nums[0]; else if(nums.size()==2) return nums[1]>nums[0]?nums[1]:nums[0]; else { int first=INT_MIN,second=INT_MIN,third=INT_MIN; bool flag1=0,flag2=0,flag3=0;//是否顶替掉初值 int count=0; int bottom=0; //缺少对三个一样的进行判断 for(int i=0;i
first) { third=second; second=first; first=nums[i]; count++; } else if(nums[i]>second) { third=second; second=nums[i]; count++; } else if(nums[i]>third) { third=nums[i]; count++; } } if(count+bottom>=3)// return third;//三个都更新了 else return first;//两个更新,一个更新或者都没更新,没达到要求,返回第一个值 } }};

转载地址:http://bexvi.baihongyu.com/

你可能感兴趣的文章
26句实用的英语
查看>>
堆栈,堆栈,堆和栈的区别
查看>>
有创业及野心的一定要看
查看>>
framebuffer驱动全篇
查看>>
手把手教你玩转ARP包
查看>>
windows驱动ddk环境设置
查看>>
基于IMD的包过滤防火墙原理与实现
查看>>
首次编译安装测试passthru
查看>>
Wireshark图解教程(简介、抓包、过滤器)
查看>>
基于PassThru的NDIS中间层驱动程序扩展
查看>>
NDIS_PACKET结构讨论
查看>>
passthru驱动调试笔记
查看>>
windows socket 编程
查看>>
windows与虚拟机下的socket通信
查看>>
WDK的安装使用
查看>>
Keil MDK 生成BIN 过程
查看>>
RT-Thread 内核实验 1 任务的基本管理
查看>>
STM32 ADC 采样 频率的确定
查看>>
Source Insight技巧收集
查看>>
Linux Kernel 3.0 版本正式发布!
查看>>