414. Third Maximum Number

此题主要是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();
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容