← 返回目录

哈希表

第 3 / 42 卷日期:

要是换成移除数组中的某个元素:

就要使用快慢指针,一个在前检测是不是等于要移除的元素,不等于的时候两个指针一起走就行了,但是一旦发现了要移除的元素,后面指针+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. 1代码随想录知识星球精华(最强八股文)第五版(算法篇)
  2. 2找出所有子集的异或总和再求和
  3. 3哈希表
  4. 4哈希冲突
  5. 5红黑树与AVL树
  6. 6平衡二叉树(AVL树)
  7. 7将有序数组转换为二叉搜索树
  8. 83. 分割(组合问题)
  9. 9方法论
  10. 10509. 斐波那契数
  11. 1162. 不同路径
  12. 1296. 不同的二叉搜索树
  13. 13322. 零钱兑换
  14. 14爬楼梯
  15. 15背包小总结 (01背包、完全背包)
  16. 16子序列问题
  17. 17674. 最长连续递增序列
  18. 18115. 不同的子序列
  19. 19总结
  20. 20技巧总结
  21. 21时间序列模型
  22. 22区间DP模型
  23. 23664. 奇怪的打印机
  24. 24编辑距离
  25. 25回文串
  26. 26DP递推公式总结
  27. 27排序算法
  28. 28其他算法
  29. 294. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历
  30. 302. TOP N问题
  31. 313. 分布式的TOP N问题
  32. 322. Astar数据结构 + 公式
  33. 334. 代码实现
  34. 345. 总体代码
  35. 35堆排序
  36. 36单源最短路
  37. 37思维导图
  38. 38链表
  39. 39回溯
  40. 40贪心
  41. 41动态规划
  42. 42排序