leetcode414:第三大的数

思路:先把所有数字排序,然后定义一个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则是删除迭代指针到结尾的数。

这样可以达到一个去重的效果。

发布了52 篇原创文章 · 获赞 52 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/Hanghang_/article/details/104987332