数组、链表、哈希表(数据结构)-代码随想录

数组

地址连续;数组的元素不能删除、只能覆盖!

在排序数组中,常用到 二分查找的方法;

移除元素时需要覆盖掉原来的元素;

使用双指针进行问题的解决(有序数组的平方、长度最小的子数组)滑动窗口

数组中数学逻辑的模拟很重要(螺旋数组Ⅱ);

注意一个重要的 概念:循环不变量;注意左闭右闭和左闭右开的情况,来设定循环时的判定条件,注意将所有的情况都包含进来!

数组、链表、哈希表(数据结构)-代码随想录_第1张图片

链表:

链表中最重要的就是 虚拟头节点(哨兵节点),对头节点的处理很方便,解决了头节点相对于其他节点的特殊性;

设置一个 前置节点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处开始即可,就已经包含了所有的情况!

你可能感兴趣的:(数据结构,leetcode,算法)