【打卡】牛客网:BM51 数组中出现次数超过一半的数字

资料:

在map中,键值key通常用于排序和惟一地标识元素。

map中的元素总是按照键值key进行比较排序的。

一、添加元素(四种方式)

二、访问元素(四种方式)

  • 其中一种:使用迭代器进行正向遍历(while循环),如下。
map<int,int> mp;
auto it = mp.begin();
while(it != mp.end())
{
    cout << it->first << " " << it->second << "\n";
    it ++;
}

三、查找元素(最优方法是,先判断存在与否,再索引对应值。防止创建空的键值对)

四、二者的比较

map:内部用红黑树实现,内部元素具有有序性

缺点:占用空间。

unordered_map:内部用哈希表实现,查找速度非常快

缺点:建立哈希表比较耗时。

C++STL之map和unordered_map详解_c++ unordered_map和map_info825的博客-CSDN博客

自己写的:

写的时候在想,怎么用for循环遍历呢?

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param numbers int整型vector 
     * @return int整型
     */
    int MoreThanHalfNum_Solution(vector<int>& numbers) {
        // write code here
        unordered_map<int, int> hash;
        int res;
        for(int i = 0;i < numbers.size(); i++){
            if(hash.find(numbers[i]) == hash.end())
                hash[numbers[i]] = 1;
            else{
                hash[numbers[i]] += 1;
                }

            //调试后,判断放外面
            if(hash[numbers[i]] > numbers.size()/2.0){
                res = numbers[i];
                break;
            }
        }
        return res;
    }
};

模板:

hash默认初始化就是0,所以hash[numbers[i]]可以直接++,不需要先=1,再++。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值