leetcode414
一.题目描述
给定一个数组,返回其第三大的数,如果不存在,则返回最大的数
二.问题分析
首先对数组进行排序,然后去除重复的元素,之后通过判断数组的长短,小于3则返回最大的数,大于3则返回第三大的数。
可使用sort()对数组进行排序。去除重复元素可使用双指针,或者通过比较相邻两数是否相等,把去除重复后的数组放到一个新的数组中。或者使用set容器,直接对数组排序和去重复。
三.代码
class Solution
{
public:
int thirdMax(vector<int>& nums)
{
set<int, greater<int>> st(nums.begin(), nums.end());
vector<int> v;
v.assign(st.begin(), st.end());
int len = (signed)st.size();
if (len < 3)
{
return *(v.begin());
}
else
{
return *(v.begin()+2);
}
return 0;
}
};
四.总结
1.set容器的迭代器为双向迭代器,只能进行++p、p++、–p、p–、*p 操作,2 个双向迭代器之间做比较,只能使用 == 或者 != 运算符。所以程序将数组在set和vector中来回转换。
2.set容器的创建默认为less,从小到大排序,可修改greater,从大到小排序