哈希表
要是换成移除数组中的某个元素:
就要使用快慢指针,一个在前检测是不是等于要移除的元素,不等于的时候两个指针一起走就行了,但是一旦发现了要移除的元素,后面指针+1,前面那个不动,这个就可以实现覆盖了,后面的覆盖掉前面的,不就移除了吗,数
组的存储是连续的,所以我们想要移除的时候就是后面元素覆盖前面的,达到移除的目的。其实替换空格也是这个道理,多了一步根据空格数来扩充空间,左右两个指针分别从原字符串和扩充字符串的最右端开始,右指针就是根
据左指针给的信息(是不是空格)来行动。
反转链表就和反转字符串不一样,结构决定的:
需要把节点的指针往回指达到反转的目的,所以需要两个指针(cur,pre)指向现在这个结点,以及他之前的一个结点(因为你要往前指才能反转),注意,在往前指之前要保存cur.next,不然直接指,那cur.next就丢了,这就
是链表的特殊之处,指完之后两个指针后移就可以,直到cur ==null,这就是循环的条件了。最后返回的是头指针哦,通过头指针就能找到这个链表。
移除链表元素的时候需要明白虚拟头指针的概念,这是为了统一操作,不然头指针还得单独操作,放一下卡哥的链接
移除链表元素
虚拟头结点的关键就是你先声明一个节点ListNode dummy= new ListNode();这个括号里面存不存值都是可以的,反正也没啥用,然后就要把这个节点指向头结点,这样你才是虚拟头结点啊dummy.next = head;
哈希表
哈希函数
哈希函数是一种映射关系,根据关键词key,经过一定函数关系得到元素的位置。
常见的哈希函数构造方法:
1、直接定址法:
取关键字或关键字的某个线性函数值为散列地址。
H(key) = a * key + b,其中a和b为常数
2、除留余数法:
取关键字被某个不大于散列表长度 m 的数 p 求余,得到的作为散列地址。
H(key) = key % p, p < m
3、叠加法:
将关键字分为位数相同的几部分,然后取这几部分的叠加和(舍去进位)作为散列地址。
用于关键字位数较多,并且关键字中每一位上数字分布大致均匀。
4、随机数法:
选择一个随机函数,把关键字的随机函数值作为它的哈希值。
全站分卷索引 · 42 卷
- 1代码随想录知识星球精华(最强八股文)第五版(算法篇)
- 2找出所有子集的异或总和再求和
- 3哈希表
- 4哈希冲突
- 5红黑树与AVL树
- 6平衡二叉树(AVL树)
- 7将有序数组转换为二叉搜索树
- 83. 分割(组合问题)
- 9方法论
- 10509. 斐波那契数
- 1162. 不同路径
- 1296. 不同的二叉搜索树
- 13322. 零钱兑换
- 14爬楼梯
- 15背包小总结 (01背包、完全背包)
- 16子序列问题
- 17674. 最长连续递增序列
- 18115. 不同的子序列
- 19总结
- 20技巧总结
- 21时间序列模型
- 22区间DP模型
- 23664. 奇怪的打印机
- 24编辑距离
- 25回文串
- 26DP递推公式总结
- 27排序算法
- 28其他算法
- 294. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历
- 302. TOP N问题
- 313. 分布式的TOP N问题
- 322. Astar数据结构 + 公式
- 334. 代码实现
- 345. 总体代码
- 35堆排序
- 36单源最短路
- 37思维导图
- 38链表
- 39回溯
- 40贪心
- 41动态规划
- 42排序