| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 两数相加——哈希表算法 -> 正文阅读 |
|
[数据结构与算法]两数相加——哈希表算法 |
力扣刷题总结一、前言初次见面请多多关照,大家好,我是三水,一个大三在读的算法小白,今天是我刷leetcode算法的第四天啦!这是我第一次在平台上发表自己的文章,今后我也会持续地在平台上分享自己学习算法过程中的一些拙见和学习到的知识。希望友友们多加指正哈 二、两数相加今天来做两数相加的算法题,我们先从理解题意和解题方式这两个部分展开来聊,上题!!! 1.题意给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 2.示例输入: 3.题目解析先分析题目重点:
接下来跟大家来说说我第一眼看到这个题目的思路,哈哈,那必然是一上来就用暴力枚举解决(新手小白上线)
python代码实现:
4.官方题解官方题解提供了两种算法思路:暴力枚举;哈希表 思路分析哈希表算法的优势:暴力枚举法随着数据量的增大,查找速度也会不同程度地变慢,算法的时间复杂度和比较的次数是有关的,暴力枚举法的时间复杂度为O(n^2),而使用哈希表来查找数组中是否存在目标元素,直接通过元素查找索引,这样时间复杂度会降低到O(1),它的主要思想是通过将值和其存储位置相关联,来实现快速的随机存储。 思路及算法:我们可以通过创建一个哈希表,对于每一个x,我们首先查询哈希表中是否存在target-x,然后再将x插入到哈希表中,即可保证不会让x和自己匹配(避免同一元素被使用两次) 代码分析C语言代码实现及详细注释说明:
python代码实现及详细注释说明:
三、重难点解析1.在自定义结构体中定义UT_hash_handle类型变量的作用(1)uthash是一个C语言的hash表实现,它是以宏定义的方式去实现hash表的,这样不仅加快了运行的速度,而且还与关键类型无关。uthash使用起来也非常方便,只需要将头文件uthash.h包含进去就能使用。 2.malloc()申请内存空间注意事项(1)malloc()可用于动态分配内存空间,malloc(size_t size)函数内有一个参数,即要分配的内存空间的大小。 3.HASH_FIND(1)根据key值数据类型的不同,我们使用不同类型的接口找到key值所对应的hash结构体,常见的有:Uthash为整型key提供的查找接口为HASH_FIND_INT;为字符型key提供的查找接口为HASH_FIND_STR…… 4.HASH_ADD(1)根据添加的key值数据类型的不同,我们使用不同类型的接口,常见的有:HASH_ADD_INT表示添加的键值为int类型,HASH_ADD_STR表示添加的键值为字符型,HASH_ADD_PTR表示添加的键值为指针类型,HASH_ADD表示添加的键值可以是任意类型的。 5.理解两数相加函数中关于是否在哈希表中查找到对应元素的算法思路
如果在哈希表中查找到了target-nums[i]对应的节点,则返回target-nums[i]的value值和i,否则就将nums[i]添加到哈希表中,这样就能有效避免重复遍历到同一元素。 四、总结通过对力扣上“两数相加”这道题的分析总结过后,自己对哈希表的理解更加深入,今后在针对这一类键值对问题我也多了一种求解方法——哈希表,虽然说暴力求解固然也是一种办法,但学习之路不能停滞不前,我们需要寻求一道问题的不同解法来扩展自己的知识面,尽量做到一题多解。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 7:40:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |