算法刷题技巧篇

公式

常数

整型最大值
Integer.MAX_VALUE
整型最小值
Integer.MIN_VALUE

构造栈

Stack<TreeNode> stack = new Stack<>()

构造队列

Queue<TreeNode> queue = new LinkedList<TreeNode>()

循环链表的入口,如图所示:

假设从头结点到环形入口节点 的节点数为x。 环形入口节点到 fast指针与slow指针相遇节点 节点数为y。 从相遇节点 再到环形入口节点节点数为 z。 
x = (n - 1) (y + z)

技巧

循环不变量规则

二分法经常写乱,主要是因为对区间的定义没有想清楚,区间的定义就是不变量。要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。
​
写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。

双指针(快慢指针)

双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
解决问题:寻找链表中位节点、反转列表、最短子序列、删除倒数第n个节点、循环链表的入口

滑动窗口

也是双指针,取双指针之间的集合。像一个正在滑动的窗口,所以也叫做滑动窗口的思想。滑动窗口最重要的精华是一个for循环做两个for循环的事情。
for循环j指向的是终止位置,起始位置需要用一个动态移动的策略去确定,这样才能用一个for循环的思路解决两个for循环能做的事情。这也是滑动窗口的精华所在,滑动窗口最重要的一个思路就是如何移动起始位置。
解决问题:最短子序列

虚拟头结点

通过设置一个虚拟头结点dummyHead可以按照统一的方式进行链表节点的移除和添加操作。
解决问题:链表增删的统一

哈希表

当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构。
数组
set (集合)
map(映射)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值