【LeetCode.170】Two Sum III - Data structure design(C++)

问题描述

Design and implement a TwoSum class. It should support the following operations:add and find.

add - Add the number to an internal data structure.
find - Find if there exists any pair of numbers which sum is equal to the value.

示例

add(1); add(3); add(5);
find(4) -> true
find(7) -> false

counter用哈希

class TwoSum {
public:
    void add(int number) {
        ++m[number];//第一次出现的key的value为0,再++
    }
    bool find(int value) {
        for (auto a : m) {
            int t = value - a.first;
            if ((t != a.first && m.count(t)) || (t == a.first && a.second > 1)) {
                return true;
            }
        }
        return false;
    }
private:
    unordered_map<int, int> m;
};
  1. ++m[number]这句很方便,实际上你可以当单独这么用m[key];,这样map里面只有一个key,其value为int的默认值0。
  2. m.count(t)返回map中t这个key出现的次数,由于unordered_map不支持重复的key,所以当t的key存在时就返回1,否则返回0。
  3. (t != a.first && m.count(t)),差值t不与a.first相同,那么t必须存在与key中;(t == a.first && a.second > 1),差值t与a.first相同,那么t必须出现两次或者说a.second必须大于1。
	unordered_map<int, int> m;
	m[1];
	if (m[2] == 0)
		cout << "fsdf";

执行以上代码会让m有两个key1和2,且value都是0。代码都没有明显得设置key的value,只是使用了操作符[]便会设置key。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值