经典算法题汇总

这篇博客汇总了经典算法题目,包括链表操作、树结构、栈的应用、数组处理及其他算法问题,如链表的第一个公共节点、判断环的存在及长度、数组中出现次数超过一半的数字、LRU缓存策略等,并探讨了大数据排序和查找相同QQ号的解决方案。
摘要由CSDN通过智能技术生成

链表

  1. 链表第一个公共节点:1) 利用栈先进后出,用两个栈对两个链表从头至尾遍历,那么栈顶就为链表的尾节点,依次弹出两个栈,直到弹出的元素不一样时,前一个相同的即为第一个公共节点. 2)分别遍历一次两个链表,算出长度差L,让长的链表的指针先走L步,然后两个指针同时移动,那么第一次指向同样节点的即为公共节点

  2. 判断是否存在环:两个指针,每次慢指针走1步,快指针走2步,如果快的最后追上慢的,那么有环

  3. 判断环的长度:从快指针追上慢指针的那个节点开始(此时一定是在环内),再让快慢指针同时移动,第二次快指针追上慢指针时,记录两个指针走过的步数,差值为环的长度

  4. 寻找入环口:一个指针从第一次快指针追上慢指针的那个节点开始,一个指针从链表头开始,两个指针同时移动,每次移动一步,如果两个指针的下一个节点相同,那么那个节点就是入环口

  5. 给定单链表节点,删除此节点: 把后面一个节点内容复制到此节点,然后把此节点的p.next指针指向p.next.next即可

  6. 链表的倒数第k个节点: 1)前后指针,后指针先走k步,然后两个指针同时后移,直到后指针指向尾节点,那么前指针即为所求. 2) 用栈储存链表,然后弹出节点,弹出的第k个即为所求

树:

  1. 根据二叉树前序,中序还原二叉树:前序的特点是根节点在序列第一位,然后在中序中找到这个根节点,左边的就是左子树所有的节点,右边就是右子树所有的节点,然后递归构造左边的序列和右边的序列

  1. 两个栈实现队列: 栈1为主栈,push函数实现:直接押入栈1。pop函数:判断栈2是否为空,若是,把栈1的元素pop再push进去,直到栈1空,然后把栈顶元素pop;若非空,则直接pop即可。

  2. 两个队列实现栈:push方法正常入队deque1,当要pop出最后一个进去的元素时,将前面的元素出队并入队在deque2中,然后把最后一个元素出队。如果要再出队一个元素,那么就把deque2的前面元素出队再入队至deque1中,保持两个队列一个为空,插入元素时插入非空的队列

数组

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值