2024年【大总结3】leetcode解题总览(算法、剑指offer、SQL,Java组件化开发教程

最后

毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节

美团面试经验

美团面试
字节面试经验
字节面试
菜鸟面试经验
菜鸟面试
蚂蚁金服面试经验
蚂蚁金服
唯品会面试经验
唯品会

因篇幅有限,图文无法详细发出

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

leetcode283. 移动零 比官方更好的解法。

leetcode303 区域和检索

leetcode348. 判定井字棋胜负 好麻烦的代码

leetcode349. 两个数组的交集

leetcode350. 两个数组的交集 II

leetcode360. 有序转化数组

leetcode448. 找到所有数组中消失的数字 天秀记录法

链表

==

链表(Linked List)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。

由于不必须按顺序存储,链表在插入的时候可以达到 O(1)的复杂度,比另一种线性表 —— 顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要 O(n) 的时间,而顺序表相应的时间复杂度分别是 O(log n) 和 O(1)。

使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。

在计算机科学中,链表作为一种基础的数据结构可以用来生成其它类型的数据结构。链表通常由一连串节点组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向上一个/或下一个节点的位置的链接(links)。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的访问往往要在不同的排列顺序中转换。而链表是一种自我指示数据类型,因为它包含指向另一个相同类型的数据的指针(链接)。

链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。

链表通常可以衍生出循环链表,静态链表,双链表等。对于链表使用,需要注意头结点的使用。

leetcode2 两数相加

leetcode19. 删除链表的倒数第N个节点

leetcode21 合并两个链表

leetcode23 合并K个排序链表

leetcode24 两两交换链表中的节点

leetcode25. K 个一组翻转链表

leetcode61 旋转链表

leetcode82. 删除排序链表中的重复元素 II

leetcode83 删除排序链表中的重复元素

leetcode86. 分隔链表

leetcode 92. 反转链表 II

leetcode141 环形链表

leetcode142 环形链表II

leetcode143 重排链表

leetcode147 对链表进行插入排序

leetcode160 相交链表

leetcode203 移除链表元素

leetcode206 反转链表

leetcode234 回文链表

leetcode237 删除链表中的节点(你意想不到的做法,注意细节)

leetcode328 奇偶链表

leetcode876 链表中间的结点

leetcode1290. 二进制链表转整数 刷新认知,最简单算法题

双指针

===

类型1:两指针中间夹的就是一个符合标准的答案,通过某种逻辑移动两个指针,扩大或缩小答案范围,最终找到最优解

类型2:快慢指针,可以应用在判断是否有环,或对空间要求高的合并等操作。

leetcode1 两数之和

leetcode3 无重复字符最长子串

leecode11 盛水最多的容器

leetcode15 三数之和

leetcode16 最接近的三数之和

leetcode18. 四数之和

leecode26 删除排序数组中的重复项

leetcode27 移除元素

leetcode42 接雨水

leetcode76 最小覆盖子串

leetcode80. 删除排序数组中的重复项 II

leetcode159. 至多包含两个不同字符的最长子串

leetcode167. 两数之和 II - 并没有那么easy的easy题

leetcode170. 两数之和 III - 数据结构设计

leetcode209. 长度最小的子数组 借这个题规范一下双指针写法

leetcode259. 较小的三数之和

leetcode340. 至多包含 K 个不同字符的最长子串

leetcode977. 有序数组的平方

贪心

==

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

leetcode31. 下一个排列

leetcode121买卖股票的最佳时机

leetcode122. 买卖股票的最佳时机 II

leetcode134. 加油站

leetcode169. 多数元素

leetcode179. 最大数

leetcode252. 会议室

leetcode253. 会议室 II

leetcode330. 按要求补齐数组 顶级难度玄学贪心

leetcode402. 移掉K位数字

leetcode435. 无重叠区间

leetcode 455. 分发饼干

动态规划

====

动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。

动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。

动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。动态规划往往用于优化递归问题,例如斐波那契数列,如果运用递归的方式来求解会重复计算很多相同的子问题,利用动态规划的思想可以减少计算量。

通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,具有天然剪枝的功能,从而减少计算量:一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。

leetcode10. 正则表达式匹配 一道没有解释的字符串dp困难题

leetcode32 最长有效括号

leetcode44. 通配符匹配 又是一道没有解释的字符串dp困难题

leetcode45 跳跃游戏II 秒杀所有答案

leecode53 最大子序列和

leetcode55 跳跃游戏 秒杀所有答案

leetcode56. 合并区间

leetcode57. 插入区间

leetcode63 不同路径II

leetcode64 最小路径和

leetcode70 爬楼梯

leetcode72 编辑距离

leetcode96. 不同的二叉搜索树 动归vs数学?​​​​​​​

leetcode97 交错字符串

leetcode115 不同的子序列

leetcode118. 杨辉三角

leetcode119. 杨辉三角 II 你能比我代码更短吗?

leetcode120. 三角形最小路径和

leetcode131. 分割回文串

leetcode132. 分割回文串 II

leetcode139 单词拆分

leetcode 152 乘积最大子序列

leetcode198 打家劫舍

leetcode213 打家劫舍II

leetcode221 最大正方形

leetcode256. 粉刷房子

leetcode276. 栅栏涂色

leetcode278. 第一个错误的版本

leetcode279 完全平方数

leetcode300 最长上升子序列

leetcode304. 二维区域和检索 - 矩阵不可变

leetcode322 零钱兑换

leetcode329. 矩阵中的最长递增路径

leetcode338 比特位计数

leetcode343. 整数拆分

leetcode376. 摆动序列

leetcode403 青蛙过河

leetcode414. 第三大的数

leetcode452. 用最少数量的箭引爆气球

leetcode516 最长回文子序列

leetcode542 01矩阵

leetcode718 最长重复子数组

leetcode887 鸡蛋掉落

二叉树

===

树是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由 n(n>0)n(n>0) 个有限节点组成一个具有层次关系的集合。

把它叫做「树」是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

它具有以下的特点:

每个节点都只有有限个子节点或无子节点;

没有父节点的节点称为根节点;

每一个非根节点有且只有一个父节点;

除了根节点外,每个子节点可以分为多个不相交的子树;

树里面没有环路。

leetcode94 二叉树的中序遍历

leetcode95. 不同的二叉搜索树 II

leetcode96. 不同的二叉搜索树 动归vs数学?

leetcode98 验证二叉搜索树

leetcode101 对称二叉树

leetcode102 二叉树的层次遍历

leetcode103. 二叉树的锯齿形层次遍历

leetcode104 二叉树的最大深度

leetcode 106. 从中序与后序遍历序列构造二叉树

leetcode105 前序中序遍历序列构造二叉树

leetcode107. 二叉树的层次遍历 II

leetcode108 将有序数组转换为二叉搜索树

leetcode109. 有序链表转换二叉搜索树

leetcode110. 平衡二叉树

leetcode111. 二叉树的最小深度

leetcode112 路径总和

leetcode113. 路径总和 II

leetcode114. 二叉树展开为链表

leetcode117. 填充每个节点的下一个右侧节点指针 II

leetcode116. 填充每个节点的下一个右侧节点指针

leetcode124. 二叉树中的最大路径和

leetcode129. 求根到叶子节点数字之和

leetcode144 二叉树的前序遍历

leetcode145. 二叉树的后序遍历 意想不到的骚操作

leetcode 222. 完全二叉树的节点个数​​​​​​​

leetcode226 反转二叉树

leetcode235. 二叉搜索树的最近公共祖先

leetcode236 二叉树的最近公共祖先

leetcode257. 二叉树的所有路径

leetcode404. 左叶子之和

leetcode538 把二叉搜索树转换成累加树

leetcode543. 二叉树的直径

leetcode617. 合并二叉树

字符串处理

=====

leecode5 最长回文子串

leetcode6. Z 字形变换

leetcode9 回文数

leetcode14. 最长公共前缀

leetcode28. 实现 strStr()

leetcode43. 字符串相乘 经典大数+和*

leetcode71. 简化路径 Unix 风格

leetcode125验证回文串

leetcode151. 翻转字符串里的单词

leetcode161. 相隔为 1 的编辑距离

leetcode165. 比较版本号 超级重要的细节

leetcode186. 翻转字符串里的单词 II

leetcode205. 同构字符串 一般人一次做不对的简单题

leetcode208. 实现 Trie (前缀树)

leetcode214. 最短回文串

leetcode242. 有效的字母异位词

leetcode243. 最短单词距离(vip题)好像挺简单?

leetcode266. 回文排列

leetcode344. 反转字符串 史上最简单力扣题

leetcode345. 反转字符串中的元音字母

leetcode383. 赎金信

leetcode387. 字符串中的第一个唯一字符

leetcode392. 判断子序列

leetcode409. 最长回文串

leetcode415. 字符串相加

leetcode434. 字符串中的单词数

leetcode647 回文子串

矩阵DFS

=====

深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。

深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。

因发明「深度优先搜索算法」,约翰 · 霍普克洛夫特与罗伯特 · 塔扬在1986年共同获得计算机领域的最高奖:图灵奖。

leetcode79. 单词搜索 网格地图搜索+回溯经典写法啦

leetcode130. 被围绕的区域

leetcode200. 岛屿数量

leetcode212. 单词搜索 II

leetcode329. 矩阵中的最长递增路径​​​​​​​

在一维DFS

======

leetcode17. 电话号码的字母组合

leetcode22. 括号生成

leetcode39. 组合总和

leetcode40. 组合总和 II

leetcode46. 全排列

leetcode47. 全排列 II

leetcode77. 组合

leetcode78 子集

leetcode90. 子集 II

leetcode131. 分割回文串

leetcode339. 嵌套列表权重和

并查集

===

在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(Union-find Algorithm)定义了两个用于此数据结构的操作:

Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。

Union:将两个子集合并成同一个集合。

由于支持这两种操作,一个不相交集也常被称为联合-查找数据结构(Union-find Data Structure)或合并-查找集合(Merge-find Set)。

为了更加精确的定义这些方法,需要定义如何表示集合。一种常用的策略是为每个集合选定一个固定的元素,称为代表,以表示整个集合。接着,Find(x) 返回 x 所属集合的代表,而 Union 使用两个集合的代表作为参数。

leetcode261. 以图判树

leetcode323. 无向图中连通分量的数目

leetcode547. 朋友圈

队列/栈

====

栈(Stack)又名堆栈,它是一种重要的数据结构。从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作是线性表操作的子集,它是操作受限的线性表,因此,可称为限定性的数据结构。限定它仅在表尾进行插入或删除操作。表尾称为栈顶,相应地,表头称为栈底。栈的基本操作除了在栈顶进行插入和删除外,还有栈的初始化,判空以及取栈顶元素等。

队列(Queue)是一种先进先出(FIFO,First-In-First-Out)的线性表。

在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为 rear)进行插入操作,在前端(称为 front)进行删除操作。

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

image.png

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

image.png

  • Kafka的集群
  • 第一个Kafka程序
  • image.png

afka的生产者

image.png

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

image.png

image.png

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

image.png

  • Kafka实战之削峰填谷

image.png

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

在前端(称为 front)进行删除操作。

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

[外链图片转存中…(img-s028qZOi-1715049343674)]

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

[外链图片转存中…(img-G6HCskdK-1715049343674)]

  • Kafka的集群
  • 第一个Kafka程序
  • [外链图片转存中…(img-xqh7MSzT-1715049343674)]

afka的生产者

[外链图片转存中…(img-UfbFlY39-1715049343675)]

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

[外链图片转存中…(img-wfTahrdh-1715049343675)]

[外链图片转存中…(img-CZFAgSlm-1715049343675)]

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

[外链图片转存中…(img-LGqXCB6g-1715049343676)]

  • Kafka实战之削峰填谷

[外链图片转存中…(img-defBxsIu-1715049343676)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值