数组、链表、哈希表(数据结构)-代码随想录
数组:
地址连续;数组的元素不能删除、只能覆盖!
在排序数组中,常用到 二分查找的方法;
移除元素时需要覆盖掉原来的元素;
使用双指针进行问题的解决(有序数组的平方、长度最小的子数组)滑动窗口;
数组中数学逻辑的模拟很重要(螺旋数组Ⅱ);
注意一个重要的 概念:循环不变量;注意左闭右闭和左闭右开的情况,来设定循环时的判定条件,注意将所有的情况都包含进来!
链表:
链表中最重要的就是 虚拟头节点(哨兵节点),对头节点的处理很方便,解决了头节点相对于其他节点的特殊性;
设置一个 前置节点pre,进行之前节点的记录很重要;在反转链表中使用到;
链表中的双指针使用:!
重要的点:指针所走的步数 之和,可以作为双指针重要的判断指标;
删除链表中倒数第N个节点:快慢指针,快指针先走 N步,然后快慢指针同时走!
链表相交:先在自己的链表中走,走完去另一个链表中寻找,将节点相等作为判定条件!注意可以拿到 null,作为终止循环的条件!
环形链表Ⅱ:使用快慢指针,快指针每次走两步,慢指针每次走一步,有环肯定会相遇;无环肯定不会相遇!相遇后再判断数学关系!
链表中的 节点相等 可以作为一个重要的判断条件!环一定在链表尾部!
哈希表:
数组、Set、Map三种哈希表结构:用索引确定位置,查找的时间复杂度都是 O(1)
数组:在哈希表的长度确定时,比如 全是小写字母,就是26;可以使用!
Set(集合):不会出现重复的元素,可以去重
Map(映射):键值对 Key-Value的形式存储,不会出现一样的键值对!
数组作为哈希表:遇到判断字符串相等与否的情况,就是用26长度的数组作为哈希表;统计字符串中字符的数量,进行比较!有效的字母易位词、赎金信!
使用Set:两个数组的交集,只记录数值!快乐数!需要进行一个数字每个位置上的值的 四则运算
while (n > 0) {int temp = n % 10;res += temp * temp;n = n / 10;
}
使用Map:两数之和(需要记录下标);三数之和、四数之和(需要使用双指针降低时间复杂度)!三个和的问题,都是在同一个数组中!
四数相加:用的四个数组,只用折半,将四次方的时间复杂度变为二次方!要使用Map,记录出现的次数!
遍历枚举中,下一层只需要从上一层 i 的 i + 1处开始即可,就已经包含了所有的情况!
数组、链表、哈希表(数据结构)-代码随想录相关推荐
- 常见数据结构-栈-队列-数组-链表-哈希表
数据结构 数据结构是计算机存储.组织数据的方式.是指相互之间存在一种或多种特定关系的数据元素的集合 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率 持续更新,学一个记一个- 栈 ...
- 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)
目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...
- 【Leetcode 专题五】数组和哈希表
目录 一.前言 二.解题思路和代码整理 2.1.数组重建 Leetcode283. 移动零 Leetcode27. 移除元素 Leetcode26. 删除有序数组中的重复项 2.2.数组双指针 Lee ...
- 【翻译】Programming Ruby——数组,哈希表和控制结构
数组和哈希表 Ruby的数组和哈希表是索引集合.两都都是保存对象集合并能通过键来读取.数组的键是数字,但是哈希表则支持对象作为键.它们都是随着新元素的加入要增长.在访问元素方面,数组效率比较高,但哈希 ...
- 手撸数据结构之线性链表---哈希表(散列) Hash
哈希数据结构 哈希表的存在是为了解决能通过O(1)时间复杂度直接索引到指定元素. 这是什么意思呢?通过我们使用数组存放元素,都是按照顺序存放的,当需要获取某个元素的时候,则需要对数组进行遍历,获取到指 ...
- Java算法学习1——链表、数组与哈希表
一.链表与哈希表的知识点讲解 1.链表 (1) 链表的实现方式 链表的实现方式有两种,分别为指针和数组,下面对这两部分的具体实现步骤做一个说明. - 指针实现 ①先要建立一个结点结构体 ②然后建立一个 ...
- PHP关联数组和哈希表(hash table) 未指定
PHP有数据的一个非常重要的一类,就是关联数组.又称为哈希表(hash table),是一种很好用的数据结构. 在程序中.我们可能会遇到须要消重的问题,举一个最简单的模型: 有一份username列表 ...
- 哈希表数据结构_算法与数据结构-哈希表
前面我们已经讲到了数组和链表,数组能通过下标 O(1) 访问,但是删除一个中间元素却要移动其他元素,时间 O(n). 循环双端链表倒是可以在知道一个节点的情况下迅速删除它,但是吧查找又成了 O(n). ...
- 哈希表数据结构_Java数据结构哈希表如何避免冲突
前言 一.哈希表是what? 这是百度上给出的回答: 简而言之,为什么要有这种数据结构呢? 因为我们想不经过任何比较,一次从表中得到想要搜索的元素.所以就构造出来了哈希表,通过某种函数(哈希函数)使元 ...
- 哈希表-数据结构(C语言)
哈希表 什么是哈希表 我们在网站上注册账号时,当填好用户名后,系统都会判断用户名是否已被使用,如果已被使用,系统就会提示该用户名已被注册.那么系统是如何检测用户名是否被使用的呢?我们能想到的最简单的方 ...
最新文章
- Python之迭代器,生成器与装饰器
- 深入Android内存泄露
- 皮一皮:直男这下懂了吧...
- oracle的后台进程能否杀掉
- boost::kruskal_minimum_spanning_tree用法的测试程序
- 一步步编写操作系统 22 硬盘操作方法
- 刷题-字符串-Java
- Oracle 19c 新特性:自动化索引 Automatic indexing 实践
- 我的春Phone之行
- 不得不爱开源 Wijmo jQuery 插件集(10)-【Expander】(附页面展示和源码)
- 容器技术Docker K8s 9 容器服务ACK应用场景
- Word中输入10以上带圈数字
- 两个路由器的有线桥接与无线桥接
- python中plt.hist_关于python中plt.hist参数的使用详解
- 神舟微型计算机系统重装步骤,电脑重装系统步骤,最简单安全的操作!
- 用Python下载学习通课程首页的资料
- 文件管理(以Unix系统为例)
- 中点画线完整算法c语言,中点画线算法
- 四个特性,让这个信创文件安全传输软件备受客户青睐
- Python基础之列表(list)操作