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,从大到小排序
本文介绍了如何解决LeetCode题目414,通过先对整数数组排序并去重,再根据数组长度确定返回第三大数或最大数的方法。使用了set和vector数据结构实现,同时讨论了set容器的特点和排序方式。
628

被折叠的 条评论
为什么被折叠?



