此题主要是C++中set的使用。
set关联式容器:
- 实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。
- 平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。
- 在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序
- 构造set集合主要目的是为了快速检索,不可直接去修改键值。
- set内部是基于红黑树实现的。插入和删除操作效率较高,因为只需要修改相关指针而不用进行数据的移动。操作的时间复杂度为O(logn)
- C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。
class Solution {
public:
int thirdMax(vector<int>& nums) {
set<int> res;
for(int i=0;i<nums.size();i++){
res.insert(nums[i]);
if(res.size()>3){
res.erase(res.begin());
}
}
return res.size() == 3 ? *res.begin() : *res.rbegin();
}
};