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

绝地灬酷狼 2022-02-05 13:11 730阅读 0赞

问题描述

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用哈希

  1. class TwoSum {
  2. public:
  3. void add(int number) {
  4. ++m[number];//第一次出现的key的value为0,再++
  5. }
  6. bool find(int value) {
  7. for (auto a : m) {
  8. int t = value - a.first;
  9. if ((t != a.first && m.count(t)) || (t == a.first && a.second > 1)) {
  10. return true;
  11. }
  12. }
  13. return false;
  14. }
  15. private:
  16. unordered_map<int, int> m;
  17. };
  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 m;

    1. m[1];
    2. if (m[2] == 0)
    3. cout << "fsdf";

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

发表评论

表情:
评论列表 (有 0 条评论,730人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCodeTwo Sum

    这是第一题的python代码,思路是将输入映射成为一个map,数组元素的值为key,下标为value,然后直接去map中查找target减去每一个元素之后的值,在map中找到k