/Leetcode-Pro

算法总结,包括常见算法文档和模板题、力扣、OJ

Primary LanguageJava

LeetCode Project

算法汇总,包含常见的经典算法以及对应的模板和各种ojs和力扣上的解题代码

常见算法总结

记录了笔试中常见的算法以及对应的模板题,见文件夹docs下;

BinaryIndexedTree.md        // 树状数组  
ConvexHullProblem.md        // 凸包问题
Differential.md             // 差分算法
DigitalDynamicProgram.md    // 数位DP
ExceptedDynamicProgram.md   // 期望DP
GameTheory.md               // 博弈论
MathTheory.md               // 数学理论
SegmentTree.md              // 线段树
SeqDynamicProgram.md        // 序列DP
template.md                 // 经典算法模板
TreeDynamicProgram.md       // 树形DP
UnioFind.md                 // 并查集

学习完后,应对大部分公司笔试都没太大问题。

题目列表

极少部分记录,完整记录见 力扣.xls文件;

题目 对应标签 标注
P1(两数之和) 数组、哈希表
P2(两数相加) 递归、链表、数学
P3(无重复字符的最长子串) 哈希表、字符串、滑动窗口
P4(寻找两个正序数组的中位数) 数组、二分查找、分治 *
P5(最长回文字串) 字符串、动态规划 *
P6(Z字形变换) 字符串
P7(整数反转) 数学
P8(字符串转换整数(atoi)) 字符串
P9(回文数) 数学
P10(正则表达式匹配) 递归、字符串、动态规划 **
P11(盛水最多的容器) 贪心、数组、双指针
(随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法)
P12(整数转罗马数字) 哈希表、数学、字符串
P13(罗马数字转整数) 哈希表、数学、字符串
P14(最长公共前缀) 字符串
P15(三数之和) 排序、数组、双指针、去重
(排序,使用 if (i == begin or nums[i] != nums[i - 1]))
P16(最接近的三数之和) 排序、数组、双指针、去重
P17(电话号码的数字组合) 哈希表、字符串、回溯 *
P18(四数之和) 排序、数组、双指针、去重
P19(删除链表的倒数第 N 个结点) 链表、双指针
P20(有效的括号) 字符串、栈
P21(合并两个有序链表) 链表、递归
P22(括号生成) 字符串、动态规划、回溯 *
P23(合并K个升序链表) 链表、分治、归并(排序)、优先队列 *
P24(两两交换链表中的节点) 链表、递归
P25(K 个一组翻转链表) 链表、递归
P26(删除有序数组中的重复项) 数组、双指针 *
P27(移除元素) 数组、双指针
P28(实现 strStr()) 双指针、字符串匹配
P29(两数相除) 位运算、数学
P30(串联所有单词的子串) 字符串、哈希表、滑动窗口 **
P31(下一个排列) 数组、双指针 **
P32(最长有效括号) 字符串、栈、动态规划
(取最值一般是通过坐标索引来相减得到,类似于P3、P5)
**
P33(搜索旋转排序数组) 数组、二分查找 *
P34(在排序数组中查找元素的第一个和最后一个位置) 数组、二分查找 *
P35( 搜索插入位置) 数组、二分查找
P35( 搜索插入位置) 数组、二分查找
P36( 有效的数独) 数组、矩阵、哈希表
P37( 解数独) 数组、矩阵、回溯 *
P38( 外观数列) 字符串、递归
P39( 组合总和) 数组、回溯 *
P40( 组合总和Ⅱ) 数组、回溯、去重 *
P41( 缺失的第一个正数) 数组、哈希表、置换 *
P42( 接雨水) 数组、双指针、动态规划、单调栈 *
P43(字符串相乘) 字符串、数学
P44(通配符匹配) 字符串、贪心、动态规划
P45(跳跃游戏 II) 数组、贪心、动态规划 *
P46(全排列) 数组、回溯
P47(全排列 II) 数组、回溯、去重
P48(旋转图像) 数组、数学、矩阵
P49(字母异位词分组) 字符串、哈希表、排序
P50(Pow(x, n)) 递归、数学、快速乘法 *
P51(N皇后) 回溯
P52(N皇后 II) 回溯
P53(最大子序和) 数组、分治、动态规划 *
P54(螺旋矩阵) 数组、矩阵、模拟 字节
P55(跳跃游戏) 数组、贪心、动态规划
P56(合并区间) 数组、排序 字节
P57(插入区间) 数组
P58(最后一个单词的长度) 字符串
P59(螺旋矩阵 II) 数组、矩阵、模拟
P60(排列序列) 递归、数学 **
P61(旋转链表) 链表、双指针
P62(不同路径) 数学、组合数学、动态规划
P63(不同路径 II) 数组、矩阵、动态规划
P64(最小路径和) 数组、矩阵、动态规划
P65(有效数字) 字符串 *
P66(加一) 数组、数学
P67(二进制求和) 数学、字符串、模拟、位运算、从后往前
P68(文本左右对齐) 字符串、模拟
P69(x 的平方根) 数学、二分查找
P70(爬楼梯) 数学、动态规划 字节(改)
P71(简化路径) 字符串、栈
P72(编辑距离) 字符串、动态规划 字节*
P73(矩阵置零) 数组、哈希表、矩阵
P74(搜索二维矩阵) 数组、矩阵、二分查找
P75(颜色分类) 数组、排序、双指针
P76(最小覆盖子串) 哈希表、字符串、滑动窗口 *
P77(组合) 数组、回溯
P78(子集) 位运算、数组、回溯
P79(单词搜索) 数组、回溯、矩阵 小米
P80(删除有序数组中的重复项 II) 数组、双指针
P81(搜索旋转排序数组 II) 数组、二分查找
P82(删除排序链表中的重复元素 II) 链表、双指针
P83(删除排序链表中的重复元素) 链表
P84(柱状图中最大的矩形) 数组、单调栈 *
P85(最大矩形) 数组、矩阵、动态规划、单调栈 *
P86(分隔链表) 链表、双指针
P87(扰乱字符串) 字符串、动态规划 拼多多**
P88(合并两个有序数组) 数组、排序、双指针
P89(格雷编码) 数学、回溯、位运算 *
P90(子集 II) 位运算、数组、回溯
P91(解码方法) 字符串、动态规划 *
P92(反转链表 II) 链表 百度、美团*
P93(复原 IP 地址) 字符串、回溯 字节、虾皮*
P94(复原 IP 地址) 字符串、回溯 字节、虾皮*
P95(复原 IP 地址) 字符串、回溯 字节、虾皮*
P96(复原 IP 地址) 字符串、回溯 字节、虾皮*
P97(复原 IP 地址) 字符串、回溯 字节、虾皮*
P98(复原 IP 地址) 字符串、回溯 字节、虾皮*
P99(复原 IP 地址) 字符串、回溯 字节、虾皮*
P100(复原 IP 地址) 字符串、回溯 字节、虾皮*
P101(复原 IP 地址) 字符串、回溯 字节、虾皮*
P103(复原 IP 地址) 字符串、回溯 字节、虾皮*
P103(复原 IP 地址) 字符串、回溯 字节、虾皮*
P104(复原 IP 地址) 字符串、回溯 字节、虾皮*
P105(复原 IP 地址) 字符串、回溯 字节、虾皮*
... ...
P206(反转链表) 链表
... ...
P977(有序数组的平方) 数组、排序
... ...
P1137(第 N 个泰波那契数) 数学、记忆搜索、动态规划