返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现LeetCode(170.两数之和之三 - 数据结构设计)
  • 753
分享到

C++实现LeetCode(170.两数之和之三 - 数据结构设计)

2024-04-02 19:04:59 753人浏览 独家记忆
摘要

[LeetCode] 170. Two Sum III - Data structure design 两数之和之三 - 数据结构设计 Design and implement a

[LeetCode] 170. Two Sum III - Data structure design 两数之和之三 - 数据结构设计

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.

Example 1:

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

Example 2:

add(3); add(1); add(2);
find(3) -> true
find(6) -> false

这道题让我们设计一个 Two Sum 的数据结构,跟 LeetCode 的第一道题 Two Sum 没有什么太大的区别,作为 LeetCode 的首题,Two Sum 的名气不小啊,正所谓平生不会 TwoSum,刷尽 LeetCode 也枉然。记得原来在背单词的时候,总是记得第一个单词是 abandon,结果有些人背来背去还在 abandon,有时候想想刷题其实跟背 GRE 红宝书没啥太大的区别,都是一个熟练功夫,并不需要有多高的天赋,只要下足功夫,都能达到一个很不错的水平,套用一句鸡汤问来激励下吧,“有些时候我们的努力程度根本达不到需要拼天赋的地步”,好了,不闲扯了,来看题吧。不过这题也没啥可讲的,会做 Two Sum 的这题就很简单了,先来看用 HashMap 的解法,把每个数字和其出现的次数建立映射,然后遍历 HashMap,对于每个值,先求出此值和目标值之间的差值t,然后需要分两种情况来看,如果当前值不等于差值t,那么只要 HashMap 中有差值t就返回 True,或者是当差值t等于当前值时,如果此时 HashMap 的映射次数大于1,则表示 HashMap 中还有另一个和当前值相等的数字,二者相加就是目标值,参见代码如下:

解法一:


class TwoSum {
public:
    void add(int number) {
        ++m[number];
    }
    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;
};

另一种解法不用 HashMap,而是 unordered_multiset 来做,但是原理和上面一样,参见代码如下:

解法二:


class TwoSum {
public:
    void add(int number) {
        s.insert(number);
    }
    bool find(int value) {
        for (auto a : s) {
            int cnt = a == value - a ? 1 : 0;
            if (s.count(value - a) > cnt) {
                return true;
            }
        }
        return false;
    }
private:
    unordered_multiset<int> s;
};

GitHub 同步地址:

https://github.com/grandyang/leetcode/issues/170

类似题目:

Two Sum

Unique Word Abbreviation

Two Sum IV - Input is a BST

参考资料:

Https://leetcode.com/problems/two-sum-iii-data-structure-design/

https://leetcode.com/problems/two-sum-iii-data-structure-design/discuss/52015/Beats-100-Java-Code

https://leetcode.com/problems/two-sum-iii-data-structure-design/discuss/52035/My-solutions-in-Java-C%2B%2B-and-python.-O(1)-time-for-add-O(n)-time-for-find-O(n)-space

到此这篇关于c++实现LeetCode(170.两数之和之三 - 数据结构设计)的文章就介绍到这了,更多相关C++实现两数之和之三 - 数据结构设计内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++实现LeetCode(170.两数之和之三 - 数据结构设计)

本文链接: https://lsjlt.com/news/131697.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++实现LeetCode(170.两数之和之三 - 数据结构设计)
    [LeetCode] 170. Two Sum III - Data structure design 两数之和之三 - 数据结构设计 Design and implement a ...
    99+
    2024-04-02
  • C++实现LeetCode(15.三数之和)
    [LeetCode] 15. 3Sum 三数之和 Given an array S of n integers, are there elem...
    99+
    2024-04-02
  • C++实现LeetCode(16.最近三数之和)
    [LeetCode] 16. 3Sum Closest 最近三数之和 Given an array nums of n integers an...
    99+
    2024-04-02
  • Java实现LeetCode(1.两数之和)
    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 1...
    99+
    2024-04-02
  • LeetCode如何实现两数之和
    小编给大家分享一下LeetCode如何实现两数之和,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目:给定一个整数数组 nums 和一个目标值 target,请你...
    99+
    2023-06-04
  • C++实现LeetCode(167.两数之和之二 - 输入数组有序)
    [LeetCode] 167.Two Sum II - Input array is sorted 两数之和之二 - 输入数组有序 Given an array of integer...
    99+
    2024-04-02
  • C++实现LeetCode(211.添加和查找单词-数据结构设计)
    [LeetCode] 211.Add and Search Word - Data structure design 添加和查找单词-数据结构设计 Design a data str...
    99+
    2024-04-02
  • 数据库设计之概念结构设计
    概念结构设计是数据库设计的第一个阶段,它是在逻辑层面上对数据库进行建模和设计的过程。概念结构设计主要包括以下内容:1. 实体-关系模...
    99+
    2023-09-15
    数据库
  • C++数据结构之AVL树的实现
    目录1.概念(1)二叉搜索树的缺点(2)定义节点2.插入(1)拆分(2)找节点与插节点(3)更新平衡因子与旋转3.判断4.完整代码及测试代码完整代码测试代码1.概念 (1)二叉搜索树...
    99+
    2024-04-02
  • C++实现LeetCode(18.四数之和)
    [LeetCode] 18. 4Sum 四数之和 Given an array S of n integers, are there elements a, b, c, and d ...
    99+
    2024-04-02
  • C++数据结构之单链表的实现
    目录一、单链表的定义二、单链表的基本操作的实现1.初始化2.取值3.查找4.插入5.删除三、完整代码四、测试一下代码一、单链表的定义 线性表的链式存储又称为单链表,它是指通过一组任意...
    99+
    2024-04-02
  • C++数据结构之哈希表的实现
    目录哈希表概念散列函数直接定址法除留余数法平方取中法哈希冲突线性探测二次探测链地址法哈希表的实现闭散列开散列哈希表概念 二叉搜索树具有对数时间的表现,但这样的表现建立在一个假设上:输...
    99+
    2023-03-11
    C++数据结构 哈希表 C++哈希表 C++数据结构
  • C++数据结构之红黑树的实现
    目录一、什么是红黑树二、红黑树的约定三、红黑树vsAVL四、红黑树的实现1.找到插入的位置2.控制平衡3.测试代码五、完整代码1.test.c2.RBTree.h一、什么是红黑树 红...
    99+
    2022-11-13
    C++ 数据结构 红黑树 C++ 红黑树
  • C++数据结构之AVL树如何实现
    这篇文章主要讲解了“C++数据结构之AVL树如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++数据结构之AVL树如何实现”吧!1.概念(1)二叉搜索树的缺点要手撕AVL树,我们首先...
    99+
    2023-07-02
  • Java数据结构之加权无向图的设计实现
    目录前言边的表示API设计代码实现图的实现API设计代码实现前言 加权无向图是一种为每条边关联一个权重值或是成本的图模型。这种图能够自然地表示许多应用。在一副航空图中,边表示航线,权...
    99+
    2022-11-13
    Java加权无向图 Java 无向图
  • Java数据结构之有向图设计与实现详解
    目录前言定义及相关术语API设计代码实现前言 在实际生活中,很多应用相关的图都是有方向性的,最直观的就是网络,可以从A页面通过链接跳转到B页面,那么a和b连接的方向是a->b,...
    99+
    2022-11-13
    Java数据结构有向图 Java有向图
  • 轻松精通数据库管理之道——运维巡检之三(结构设计)
    前言  做好日常巡检是数据库管理和维护的重要步骤,而且需要对每次巡检日期、结果进行登记,同时可能需要出一份巡检报告。  本系列旨在解决一些常见的困扰:不知道巡检哪些东西不知道怎么样便捷体检机器太多体检麻烦生...
    99+
    2024-04-02
  • C++数据结构之单链表如何实现
    这篇文章主要介绍了C++数据结构之单链表如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++数据结构之单链表如何实现文章都会有所收获,下面我们一起来看看吧。一、单链表的定义线性表的链式存储又称为单链表,...
    99+
    2023-06-30
  • C++数据结构之哈希表如何实现
    本篇内容主要讲解“C++数据结构之哈希表如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++数据结构之哈希表如何实现”吧!哈希表概念二叉搜索树具有对数时间的表现,但这样的表现建立在一个假...
    99+
    2023-07-05
  • Java数据结构之实现跳表
    目录一、跳表的定义二、跳表搜索三、插入元素四、删除元素五、完整代码一、跳表的定义 跳跃表是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作