leetcode第三大的数

1.利用set

set中元素具有唯一性和排序性,且默认是升序,

将数组中元素赋值给set,若set大小大于3,则返回倒数第三个,否是返回倒数第一个元素

代码如下:

class Solution {
public:
    int thirdMax(vector<int>& nums) {
        //利用set中元素的有序性和唯一性,默认升序排列
     set<int> s(nums.begin(), nums.end());
        auto it = s.end();
        it--;
        if(s.size() >= 3){
            it--;
            it--;
        }
        return *it;//如果set中元素个数大于等于3,返回倒数第三个元素,如果小于3,返回倒数第一个元素
    }
};

时间复杂度O(n),空间复杂度O(n)

二、

可以维护一个大小为3的set,如果set的大小大于3,就取掉第一个元素

遍历数组之后,如果set的大小为3,最返回最后一个元素,如果小于3,则返回第一个元素

代码如下:

class Solution {
public:
    int thirdMax(vector<int>& nums) {
        //利用set中元素的有序性和唯一性,默认升序排列
     set<int> s;
     for(int i=0;i<nums.size();i++)
      {
           s.insert(nums[i]);
           if(s.size()>3)
             s.erase(s.begin());
      }
    set<int>::iterator iter1=s.begin();//指向第一个元素
    set<int>::iterator iter2=s.end();//指向最后一个元素
     iter2--;
     return s.size()<3?*iter2:*iter1;//遍历之后set中元素个数等于3返回第一个元素,否则返回最后一个元素
    }
};

时间复杂度O(n),空间复杂度O(1)

扫描二维码关注公众号,回复: 9870030 查看本文章

或者也可以分别设置firse,second,third保持第一大,第二大,第三大元素

发布了191 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38196982/article/details/104815423