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保持第一大,第二大,第三大元素