leetcode刷题目录

按照数据结构

数组

链表

哈希表

字符串

双指针

队列

二叉树

并查集

递归

回溯

贪心

图论

排序

剑指offer

https://interviewguide.cn/notes/03-hunting_job/03-algorithm/02-sword-offer/60-%E5%89%91%E6%8C%87offer.html

刷题

脑筋急转弯

设计题

二分查找

双指针

前缀树

哈希函数

区间问题

(假设我们有一个数组)针对不同的题目,我们有不同的方案可以选择(加粗字体为最佳方案):

  • 数组不变、求区间和(即区间查询):前缀和、树状数组、线段树
  • 频繁单点增减、求区间和(即区间查询):树状数组、线段树
  • 频繁区间增减、输出数组&&单点查询:差分数组
  • 频繁区间增减、求区间和(即区间查询):线段树、树状数组
  • 频繁区间更新为同一个数、求区间和(即区间查询):线段树

这样看来,「线段树」能解决的问题是最多的,那我们是不是无论什么情况都写「线段树」呢?

答案并不是,而且恰好相反,只有在我们遇到第 4 类问题,不得不写「线段树」的时候,我们才考虑线段树。

因为「线段树」代码很长,而且常数很大,实际表现不算很好。我们只有在不得不用的时候才考虑「线段树」。

总结一下,我们应该按这样的优先级进行考虑:

  • 简单求区间和,用「前缀和」
  • 多次将某个区间变成同一个数,用「线段树」
  • 其他情况,用「树状数组」

注意:上述总结是对于一般性而言的(能直接解决的),对标的是模板问题。
但存在经过一些经过“额外”操作,对问题进行转化,从而使用别的解决方案求解的情况。
例如某些问题,我们可以先对原数组进行差分,然后使用树状数组,也能解决区间修改问题。
或者使用多个树状数组来维护多个指标,从而实现类似线段树的持久化标记操作。

前缀和

线段树

差分数组

树状数组

区间

单调栈


滑动窗口

76.最小覆盖子串

动态规划





按照动态规划类型

(2)序列型动态规划,重点

(2.1) 单序列型动态规划

(2.2)双序列动态规划

  • 状态: f[i][j]表示第一个sequence的前i个数字/字符, 配上第二个sequence的前j个;
  • 方程: f[i][j] = 研究第i个和第j个的匹配关系;
  • 初始化: f[i][0]和f[0][i]; 答案: f[n][m], 其中n = s1.length(); m = s2.length();

(3)划分型动态规划,重点

  • 状态: f[i]表示前i个元素的最大值; 方程: f[i] = 前i个元素里面选一个区间的最大值; 初始化: f[0]; 答案: f[n - 1]

(4)区间型动态规划,重点

二叉树


排序

按照算法思维

贪心

  1. 无重叠区间
  2. 最长数对链

https://xiaochen1024.com/courseware/60b4f11ab1aa91002eb53b18/61963ce5c1553b002e57bf14

按照数据结构

链表

链表所有的简单题都做完了

数组&&字符串

字符串可以看成是一种特殊的一维数组

一维数组(查找)

找到满足某条性质的数

二维数组
子串&&子序列

位运算

待做的题目

516. 最长回文子序列
334. 递增的三元子序列

给定一个数组:

698.划分为k个相等的子集
473.火柴拼正方形
416. 分割等和子集
417. 1049. 最后一块石头的重量 II



随机抽样算法

模拟

遇见过的真实的面试题

华为机试

  • 华为机试:污染水域
    • 先把所有的污染源都入队
    • 然后从各个污染源同时开始一圈一圈的向净水扩散,
    • 那么最后扩散到的净水就是花费的天数!


leetcode大神

https://www.cnblogs.com/grandyang/p/4606334.html
https://github.com/gzwl/leetcode
https://blog.csdn.net/lanxu_yy/column/info/leetcode-solution
https://programmercarl.com

目标:在我职业生涯的前3年,至少把leetcode上的题刷完一半

刷题oj:https://www.luogu.com.cn/problem/list?orderBy=difficulty&order=asc&difficulty=1&page=1

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值