一、题目描述
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
示例 1:
1 | 输入: [3, 2, 1] |
示例 2:
1 | 输入: [1, 2] |
示例 3:
1 | 输入: [2, 2, 3, 1] |
二、题解
1.算法描述
- 窗口滑动
2.个人分析
- 初始化一个长度为三的滑动窗口,用三个变量实现。遍历数组时,使用数组中的元素更新窗口中的值,使用
flag
标记窗口中元素的更新次数,如果flag>=3,则说明窗口中的元素被全部更新,即返回窗口中的最小值;否则,falg只更新了1次或2次,即第三大的数不存在, 所以返回最大的数。
3.代码
1 | int thirdMax(int *nums, int numsSize) |