思路:先把所有数字排序,然后定义一个map来存取,key为nums的值,value为nums出现的次数。这样就可以滤掉多余的数,当然你不采用map的方法,而删除掉多余的数也可以。
然后再定义一个map迭代器,返回相应的数即可。
使用map方法来做:
int thirdMax(vector<int>& nums) {
map<int,int> sortnums;
sort(nums.begin(),nums.end());
for(int i = 0; i < nums.size(); i++)
{
sortnums[nums[i]] ++;
}
int temp = 0;
map<int,int>::iterator i ;
for( i = sortnums.begin(); i != sortnums.end(); i++)
{
if(sortnums.size() >= 3 && temp == sortnums.size() - 3)
{
return i->first;
}
else if(sortnums.size() < 3 && temp == sortnums.size()-1)
{
return i->first;
}
temp ++;
}
}
使用去重的方法来做:
int thirdMax(vector<int>& nums) {
sort(nums.begin(),nums.end());
nums.erase(unique(nums.begin(), nums.end()), nums.end());
return nums.size() >= 3 ? nums[nums.size()-3] : nums[nums.size()-1];
}
unique函数和erase函数搭配使用。
unique函数的作用是把重复的元素放到数组后面,返回的是无重复数的迭代指针
unique删除的是相邻的重复数,所以的话得先排序。
erase则是删除迭代指针到结尾的数。
这样可以达到一个去重的效果。