常见算法题思路总结

链表

从尾打印链表:使用一个vector顺序装下链表,然后将vector逆序
反转链表:使用vector顺序装下链表,然后反向遍历vector从头开始更新链表的值
合并两个有序链表:创建一个链表头节点L,同时遍历A和B链表,将值小的优先后插L,最后将非空链表单独后插L
两个链表的第一个公共节点:计算两链表长度,长链表移动长度差个节点,返回节点
链表中环的入口节点:使用set,将遍历过的指针地址存入set,当碰到重复地址时便是入口节点
判断链表是否有环:使用快慢指针
链表中倒数最后K个节点:使用快慢指针,快指针移动k个节点,然后快慢指针同时移动,注意例外情况判断
删除链表中重复节点:判断两节点是否重复,若重复记录重复值temp,依次向后判断其他节点是否等于temp,是就挨个删除
二叉树的深度在这里插入图片描述
二叉树的第K个节点:定义全局变量记录遍历的节点个数,采用中序遍历判断是否访问到了第k个节点,缓存下来并返回
二叉树的镜像:直接前序遍历交换左右子树
在这里插入图片描述
从上向下大于二叉树:使用宽搜
用两个栈实现队列:入栈向stack1入,出栈若stack2为空,就向将stack1元素全部压入stack2栈中,再返回栈顶元素,若stack2非空,直接返回stack2栈顶元素
跳n级台阶有多少种跳法(1步,2步):从末尾向前跳
在这里插入图片描述
左旋字符串k次:K轮循环,每轮循环循环左移一个位置
字母异位词组合到一起:将每个单词字母从大到小排序,排序之火如果一样就属于字母异位词,存到key为排序之后的映射value中
在这里插入图片描述
最长连续子序列
在这里插入图片描述
思路:关键是找起点,判断当前值减一的值有没有
将列表存入unordered_set去重,遍历unordered_set,判断当前元素的 x 的 (x-1) 值是否在集合中,如果不在,则是连续序列起点,依次判断x+1,x+2,x+3在不在集合中,从而算出最长连续子序列

盛水最多的容器
在这里插入图片描述

思路:双指针,用两枚指针指向两端,保证长最大,然后不断移动短的一边向中间靠拢,过程中记录下来最大面积
为什么移动短边:装多少水是由最短边决定的,为什么最短边移动,是因为如果长边移动,那么装的水可能会少,(因为由最短边决定,无论你长边移动后高度增加或者减少,都只能是装水量变少。)不可能会多。而如果移动最短边,那么有可能能够装更多的水。
有效括号
遇左括号入栈
遇右括号:栈空无效,栈顶括号不匹配无效,栈顶括号若匹配出栈,最后如果栈空有效
二叉树的层次遍历:每轮循环开始之前,统计队列元素个数,就是每层的节点个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值