题型总结——leetcode 414 第三大的数
414. 第三大的数
题目

解法
三种解法
- 排序
- 有序集合
- 一次遍历
排序
非常常规且容易想到的解法,只不过在时间复杂度上不是很友好
1 | int thirdMax(vector<int> &nums) { |
有序集合
长时间没有使用Set,甚至忘记了有这东西,第一时间先到的是双端队列这种东西,set会对插入的内容进行一个排序处理,begin位置的在默认情况下是最小值
时间复杂度:O(n),其中 n 是数组 nums 的长度。由于有序集合的大小至多为 3,插入和删除的时间复杂度可以视作是 O(1) 的,因此时间复杂度为 O(n)。
空间复杂度:O(1)。
1 | set<int> s; |
一次排序
这种实际需要重点学习的方法
这方法实际是对有序集合排序过程的模仿,最开始没有想到这种解决办法是因为max和min这俩函数用多了
- 时间复杂度:O(n),其中 n 是数组 nums 的长度。
- 空间复杂度:O(1)。
1 | int thirdMax(vector<int> &nums) { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 mao的博客!