![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法分析
文章平均质量分 92
常用的经典的算法分析
小朱小朱绝不服输
这个作者很懒,什么都没留下…
展开
-
【Leetcode】二分法问题解析(模板+应用)
二分法是查找算法中常用的算法,通过Leetcode刷题过程中对二分法的练习和总结。二分法模板:主要考虑的是索引是否越界,以及查找元素索引是否正确,根据题目具体调整。原创 2022-06-02 17:06:49 · 1151 阅读 · 0 评论 -
【leetcode】算法刷题汇总
本篇总结的就是刷题过程中遇到的经典题目,以及对应的数据结构算法的学习。如果想按照数据结构进行刷题,可以参考:150道基础算法分类总结(2022)更新中……原创 2022-06-01 15:40:45 · 1506 阅读 · 0 评论 -
150道基础算法分类总结(2022)
在刷了一部分leetcode算法题之后,想要回头系统复习一下,发现刷的比较乱,特此整理一下,方便后续二刷,主要是对各种类型算法的一个分类,以及比较典型的题目的整理。学习说明题目来源lettcode参考代码是用Java写的供自己方便学习算法分类1. 二叉树树也是一种非常重要的数据结构,因为很多容器的底层都设计到树,所以树也成了面试常问的重点了。特别是二叉树及二叉搜索树的算法。二叉树的考点题目来源扩展题解参考二叉树的遍历(递归和迭代实现)102. 二叉树的层序遍历原创 2022-03-02 16:03:26 · 3012 阅读 · 2 评论 -
算法(Java)——二分法查找
在排序数组中,二分法查找是一种高效率方法。原创 2021-03-14 21:58:57 · 5837 阅读 · 0 评论 -
【Leetcode】图算法总结
Leetcode中图的算法是比较常见的类型,比如无向图的单源最短路径,有向图的单源最短路径,多源最短路径等问题,下面就对图的算法进行总结。原创 2022-07-13 22:33:28 · 1594 阅读 · 1 评论 -
【Leetcode】括号问题
Leetcode中关于括号问题的汇总,包括有效括号、括号生成、最长有效括号等等。原创 2022-07-07 17:03:17 · 521 阅读 · 0 评论 -
【Leetcode】最大连续1的个数
leetcode最大连续1的个数算法汇总原创 2022-07-01 15:05:21 · 605 阅读 · 0 评论 -
【Leetcode】链表排序(逐步提高时空复杂度)
链表排序的逐步优化方法。原创 2022-06-29 22:05:35 · 467 阅读 · 0 评论 -
【Leetcode】岛屿问题——dfs算法
岛屿问题是dfs回溯算法中的经典问题,以下就是对岛屿问题相关的问题进行汇总。原创 2022-06-27 17:10:39 · 954 阅读 · 0 评论 -
【Leetcode】旋转系列(数组、矩阵、链表、函数、字符串)
leetcode旋转系列问题,包括数组、矩阵、链表、函数、字符串。原创 2022-06-23 21:33:18 · 454 阅读 · 0 评论 -
【Leetcode】最长递增子序列问题及应用
最长递增子序列LIS问题的一些变形应用,更适用于笔试题目。原创 2022-06-21 16:58:53 · 1089 阅读 · 0 评论 -
【Leetcode】计算最长系列(动态规划)
力扣之最长序列,字符串系列,练习动态规划,贪心算法,双指针。原创 2022-06-15 22:13:49 · 696 阅读 · 0 评论 -
【Leetcode】计算中位数(数据流、滑动窗口、两个正序数组)
【leetcode】中汇总计算数据流、滑动窗口,两个正序数组的中位数,主要采用的办法是优先队列维护两个堆,以及使用二分查找计算。原创 2022-06-14 20:09:04 · 505 阅读 · 0 评论 -
【Leetcode】优先队列(PriorityQueue)问题解析
Java `PriorityQueue` 实现了 Queue 接口,不允许放入 null 元素;其通过堆实现,具体说是通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue 的底层实现,数组初始大小为11;也可以用一棵完全二叉树表示。............原创 2022-06-07 20:17:40 · 834 阅读 · 0 评论 -
【Leetcode】算法中常用的公式总结
在算法刷题过程中,总会遇到一些小的公式计算,如质数,最大公约数,最小公倍数这些,特此总结一下。文章目录1. 质数2. 牛顿迭代法3. 最大公约数4. 最小公倍数5. 摩尔投票法1. 质数一个正整数只能被1和它自身整除且大于1,那么这个数就是素数(质数)。计算方法:使用开方去过滤,提高运行效率。下面给出质数的判断,以及n以内的质数和个数。import java.util.*;public class Prime { // 质数计算和判断 public static void main原创 2022-05-31 11:01:12 · 736 阅读 · 0 评论 -
【Leetcode】并查集(Union-Find)算法
在并查集(Union-Find)中学习了并查集算法的原理以及几种算法实现。下面通过leetcode的算法题来具体使用并查集(Union-Find)算法。文章目录Union-Find模板1. 使用路径压缩的加权quick-union算法2. quick-union算法1319. 连通网络的操作次数1. 题目描述2. 思路分析3. 代码实现547. 省份数量1. 题目描述2. 思路分析3. 代码实现Union-Find模板1. 使用路径压缩的加权quick-union算法 class UF{原创 2022-05-27 11:23:48 · 1895 阅读 · 1 评论 -
并查集(Union-Find)
并查集是一种巧妙的算法思想,主要解决连通性问题的场景,比如:一组对象被划分成了若干个区域,求解被划分区域的数量,或者求解如何将这几个区域连接起来。文章目录1. 并查集(Union-Find)算法介绍1.1 动态连通性1.2 union-find算法API2 union-find的实现2.1 quick-find算法2.2 quick-union算法2.3 加权quick-union算法2.4 使用路径压缩的加权quick-union算法2.5 算法比较1. 并查集(Union-Find)算法介绍1.1原创 2022-05-26 23:24:59 · 975 阅读 · 1 评论 -
【leetcode】区间问题求解:重叠区间,合并区间,删除区间
区间问题: 这类面试题目还挺讨巧的,因为不需要掌握什么数据结构与算法的先验知识,看懂题目之后模拟一遍即可,很容易考察出应聘者到底会不会写代码。文章目录56. 合并区间1. 题目描述2. 思路分析3. 参考代码57. 插入区间1. 题目描述2. 思路分析3. 参考代码1288. 删除被覆盖区间1. 题目描述2. 思路分析3. 参考代码228. 汇总区间1. 题目描述2. 思路分析3. 参考代码354. 俄罗斯套娃信封问题1. 题目描述2. 思路分析3. 参考代码56. 合并区间1. 题目描述leetc原创 2022-05-19 16:41:19 · 697 阅读 · 0 评论 -
【Leetcode】BFS、DFS、并查集判断二分图
通过本篇文章学习一下二分图,以及使用BFS、DFS、并查集三种方法来判断二分图。文章目录1. 二分图1.1 什么是二分图?1.2 如何判断二分图2. 785. 判断二分图2.1 题目描述2.2 思路分析2.3 参考代码1. 二分图1.1 什么是二分图?若无向图 G = (V, E) 的顶点集 V 可以分割为两个互不相交的子集,且图中每条边的两个顶点分别属于不同的子集,则称图 G 为一个二分图。例如上图,顶点可以分为红色和蓝色两个集合,且图中每条边的两个顶点分别属于不同的集合,因此 上图是二分图。原创 2022-05-18 22:48:34 · 834 阅读 · 0 评论 -
【Leetcode】图的多源BFS详解
对于Tree的BFS(典型的「单源 BFS」)大家都比较熟悉:首先把root节点入队,再一层一层无脑遍历就行了。对于图的BFS(「多源 BFS」)也是一样,与Tree的BFS的区别如下:Tree只有1个root,而图可以有多个源点,所以首先需要把多个源点都入队。Tree是有向的因此不需要标识是否访问过,而对于无向图来说,必须得标志是否访问过哦!并且为了防止某个节点多次入队,需要在其入队之前就将其设置成已访问!下面通过几道leetcode题目的练习来掌握图的多源BFS的使用。话不多说,进原创 2022-05-18 17:39:28 · 1303 阅读 · 0 评论 -
【Leetcode】字典树(Trie树)算法
在Trie树(字典树&前缀树)了解了数据结构构建的方法,这篇文章通过实例来对Trie树算法进行训练。文章目录208. 实现 Trie (前缀树)1. 题目描述2. 思路分析3. 参考代码820. 单词的压缩编码1. 题目描述2. 思路分析3. 参考代码面试题 17.13. 恢复空格1. 题目描述2. 思路分析3. 参考代码211. 添加与搜索单词 - 数据结构设计1. 题目描述2. 思路分析3. 参考代码676. 实现一个魔法字典1. 题目描述2. 思路分析3. 参考代码简单再回顾一下Trie树原创 2022-05-16 21:20:59 · 2613 阅读 · 0 评论 -
Trie树(字典树&前缀树)
Trie树的学习文章目录1. Trie树的基本知识2. Trie树的实现2.1 二维数组实现2.2 TrieNode实现2.3 方法对比2.4 问题分析1. Trie树的基本知识Trie 树(又叫「前缀树」或「字典树」)是一种用于快速查询「某个字符串/字符前缀」是否存在的数据结构。Trie 树的本质,就是利用字符串之间的公共前缀,将重复的前缀合并在一起。Trie树是一种哈希树的变种。典型应用:用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。优点:最大限度原创 2022-05-16 17:12:15 · 1831 阅读 · 0 评论 -
【leetcode】动态规划&数位DP
这篇博客通过一道经典的题目来学习数位DP。1. 题目描述题目链接:902. 最大为 N 的数字组合2. 思路分析方法一:由于题目给定的 digits 不包含 0,因此相当于只需要回答使用 digits 的数值能够覆盖 [1,x]范围内的多少个数字。先将字符串数组 digits 转为数字数组 nums,假定 nums 的长度为 m,然后考虑如何求得 [1,x] 范围内合法数字的个数。存在函数int dp (int[] nums, int n),能够返回区间 [1,x] 内合法数的个数,那么配合原创 2022-04-15 11:31:05 · 835 阅读 · 0 评论 -
【leetcode】下一个重排列
面试题目:给定任意一个自然数,获取它重新排列后,下一个比它大的自然数,要求时间复杂度O(n)。例如: 给定1233, 它的下一个是1323; 给定1323, 它的下一个是1332。这道题直接全排列,暴力搜索时间复杂度太高,应该怎么入手?这是字典序算法。首先看一道leetcode的相似题目:leetcode题目题目链接:31. 下一个排列下一个排列是指其整数的下一个字典序更大的排列。如果存在下一个字典序更大的排列,输出更大,不存在,则输出最小的。以数字序列[1,2,3] 为例,其排列按照字典原创 2022-04-14 15:30:11 · 603 阅读 · 0 评论 -
【leetcode】设计哈希集合(HashSet)、哈希映射(HashMap)
我们一般对于HashSet和HashMap都是直接使用数据结构,具体让自己实现一个HashSet和HashMap,又该怎样实现呢?文章目录1. 设计哈希集合1.1 题目描述1.2 思路分析(1)简单数组(2)链表解法(3)分桶数组2. 设计哈希映射2.1 题目描述2.2 思路分析(1)简单数组(2)链表解法(3)开放寻址法1. 设计哈希集合1.1 题目描述题目链接:705. 设计哈希集合1.2 思路分析(1)简单数组由于题目给出了 0 <= key <= 10^6 数据范围,同时原创 2022-03-30 20:58:35 · 957 阅读 · 0 评论 -
【leetcode】两数之和到三数之和到四数之和
两数之和,想必刷过leetcode都知道,作为第一道题目,是我们算法刷题的开门砖。随后逐步进阶为三数之和,四数之和。从最开始的哈希,到最后的双指针解法,我们可以学到很多。文章目录1. 两数之和1.1 题目描述1.2 思路分析2. 两数之和进阶四数相加Ⅱ2.1 题目描述2.2 思路分析3. 两数之和高级三数之和3.1 题目描述3.2 思路分析4. 两数之和终极四数之和4.1 题目描述4.2 思路分析1. 两数之和1.1 题目描述题目链接:1. 两数之和1.2 思路分析本题使用HashMap来存储原创 2022-03-30 16:11:14 · 866 阅读 · 0 评论 -
【Leetcode】LFU/LRU缓存——自定义双向链表
在做题之前首先对LFU算法有一定的了解。1. LFU算法1.1 原理LFU(Least Frequently Used)算法,即最少访问算法,根据访问缓存的历史频率来淘汰数据,核心思想是“如果数据在过去一段时间被访问的次数很少,那么将来被访问的概率也会很低”。1.2 数据结构一般会维护两个数据结构:哈希:用来提供对外部的访问,查询效率更高;双向链表或队列:维护了对元素访问次数的排序缓存操作导致的链表变化:添加新元素:新元素访问次数为1,放到队尾;缓存淘汰:从队尾开始淘汰,因为原创 2022-03-30 10:42:11 · 1124 阅读 · 0 评论 -
【leetcode】滑动窗口的最大值
在子数组的最小值之和——单调栈+动态规划中学习了单调栈,同样的,单调队列也需要掌握。滑动窗口的最大值是一道经典的单调队列问题。文章目录1. 题目描述2. 思路分析1)单调队列2)优先队列1. 题目描述题目链接:239. 滑动窗口最大值2. 思路分析1)单调队列由于我们需要求出的是滑动窗口的最大值,如果当前的滑动窗口中有两个下标 i 和 j,其中 i 在 j 的左侧(i<j),并且 i 对应的元素不大于 j 对应的元素(nums[i] ≤ nums[j]),那么会发生什么呢?当滑动窗口原创 2022-03-29 23:04:15 · 1302 阅读 · 0 评论 -
【leetcode】子数组的最小值之和
单调栈在解决算法问题时是一个很优化的思路,可以降低时间复杂度。在接雨水问题——动态规划+单调栈,学习了一道比较经典的单调栈问题,接下来,仍然是对单调栈的一个练习。1. 题目描述题目链接:907. 子数组的最小值之和2. 思路分析这题意思是,遍历所有的连续子数组,然后求所有子数组中最小值之和。1)暴力法遍历所有区间,然后对于每个区间找出最小值求和。这种方法时间复杂度是 O(n^3) ,显然不可行。2)暴力法优化对于区间左端点 i ,遍历所有的右端点 j ,然后维护最小值,时间复杂度可以降到原创 2022-03-29 11:41:52 · 2067 阅读 · 0 评论 -
【leetcode】鸡蛋掉落问题
在leetcode刷动态规划问题过程中,鸡蛋掉落问题是比较经典的,特别是笔试面试喜欢出的问题。腾讯,Vivo等大厂都出现过,在这里通过自己学习,以及借鉴大佬的思路,对这道题进行整理。其它算法问题刷题总结可以参考:基础算法分类总结(持续更新中)。文章目录一、鸡蛋掉落问题解析1. 题目描述2. 解决方法2.1 动态规划——01背包——二维数组2.2 动态规划——01背包——一维数组2.3 动态规划——二维数组2.4 动态规划——一维数组一、鸡蛋掉落问题解析1. 题目描述leetcode题目链接:887原创 2022-03-13 17:33:20 · 2418 阅读 · 0 评论 -
【Leetcode】接雨水问题
在leetcode刷题过程中,接雨水问题是比较经典的,特别是笔试面试喜欢出的问题。腾讯,Vivo等大厂都出现过,在这里通过自己学习,以及借鉴大佬的思路,对这道题进行整理。这道题涉及了动态规划和单调栈,包括动态规划的一个优化问题,以及单调栈的典型应用。其它算法问题刷题总结可以参考:基础算法分类总结(持续更新中)。文章目录一、接雨水问题全面解析1. 题目描述2. 解决方法2.1 暴力 时间O(N^2) 空间O(1)2.2 动态规划 时间O(N) 空间O(N)2.3 双指针 时间O(N) 空间O(原创 2022-03-13 16:53:24 · 1222 阅读 · 0 评论 -
【leetcode】前缀和思想
在刷题的时候发现在预处理的时候可以使用前缀和的思想,特此结合例题总结一下。题目难度推荐2055. 蜡烛之间的盘子中等🤩🤩🤩🤩303. 区域和检索 - 数组不可变简单🤩🤩🤩🤩🤩304. 二维区域和检索 - 矩阵不可变中等🤩🤩🤩🤩🤩525. 连续数组中等🤩🤩🤩🤩724. 寻找数组的中心下标简单🤩🤩🤩🤩🤩1480. 一维数组的动态和简单🤩🤩🤩🤩🤩1588. 所有奇数长度子数组的和简单🤩🤩🤩🤩🤩528. 按权重随机选择中原创 2022-03-08 15:27:08 · 842 阅读 · 0 评论 -
【leetcode】滑动窗口类问题
滑动窗口是算法中一种重要的解题思想,通过分析力扣中的几道题目来学习滑动窗口的思想。文章目录一、更贴合笔试的滑动窗口综合题1.1 题目分析1.2 滑动窗口+有序集合1.3 桶排序二、字符串滑动窗口2.1 题目分析2.2 滑动窗口+双指针一、更贴合笔试的滑动窗口综合题1.1 题目分析题目链接:220. 存在重复元素 III题目描述:给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] - nums[j]) <= t ,同原创 2022-02-18 15:40:25 · 1761 阅读 · 0 评论 -
图论搜索:如何使用多源BFS降低时间复杂度
图论搜索中,单源BFS和多源BFS搜索距离。文章目录1. leetcode中BFS图论搜索题2. 单源 BFS3. 多源 BFS4. 多源BFS扩展5. 总结1. leetcode中BFS图论搜索题leetcode链接:1162. 地图分析你现在手里有一份大小为 n x n 的 网格 grid,上面的每个 单元格 都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的。如果网格上只有陆地或者海洋,请返回 -1。我们这原创 2022-01-29 14:21:01 · 1541 阅读 · 0 评论 -
算法面试问题高频系列(二)
以此记录一些算法面试的高频问题。算法面试问题高频系列(一)本次的算法面试高频问题包括:可逐步优化的前缀和面试题、可逐层递进的经典题以及如何根据「数据范围」调整使用何种算法、具有多种解法的简单题、一道简单但可优化的开场面试题、一道结合了其他数据结构的「链表合并」题。文章目录一、可逐步优化的前缀和面试题724. 寻找数组的中心下标1. 两遍前缀和(前后前缀和)2. 常数级别的空间优化(一遍前缀和)3. 优化至常数级别4. 前缀和模板(高频)二、可逐层递进的经典题1004. 最大连续1的个数 III1. 动原创 2021-12-28 11:35:48 · 459 阅读 · 0 评论 -
算法面试问题高频系列(一)
在面试过程中,一些手撕代码的高频问题值得总结和记录。如:Top K 问题的多种解法、一道结合「简单数据结构 & 简单算法」的面试题、既能考察对「数据结构」的掌握,还能考察对「递归函数」的设计、文章目录一、Top K 问题的多种解法703. 数据流中的第 K 大元素1. 冒泡排序法2. 快速排序法3. 优先队列法二、一道结合「简单数据结构 & 简单算法」的面试题21. 合并两个有序链表1. 双指针解法(哨兵技巧)2. 递归法实现三、既能考察对「数据结构」的掌握,还能考察对「递归函数」的设计2原创 2021-12-24 22:31:07 · 1093 阅读 · 0 评论 -
算法分析之贪心算法
文章目录一、贪心算法基础知识1. 基本概念2. 基本思路3. 存在问题4. 适用问题5. 贪心选择性质与最优子结构性质6. 实现框架二、贪心算法与动态规划1. 举例分析1)0-1背包问题2)背包问题2. 贪心套路三、leetcode例题讲解贪心算法问题1. 贪心算法常规问题(1)常规问题455. 分发饼干1005. K 次取反后最大化的数组和860. 柠檬水找零2. 贪心算法进阶问题(1)序列问题376. 摆动序列738. 单调递增的数字(2)股票问题122. 买卖股票的最佳时机 II714. 买卖股票的最原创 2021-12-20 17:19:26 · 1896 阅读 · 0 评论 -
算法分析之二叉树常见问题
二叉树的基础知识参考:算法分析之二叉树,二叉树的递归和迭代遍历方法参考:算法分析之二叉树遍历。文章目录一、二叉树的解题方法1. 递归法2. 迭代法二、leetcode例题讲解二叉树问题1. 二叉树的属性问题101. 对称二叉树104. 二叉树的最大深度111. 二叉树的最小深度222. 完全二叉树的节点个数110. 平衡二叉树257. 二叉树的所有路径100. 相同的树404. 左叶子之和513. 找树左下角的值112. 路径总和2. 二叉树的修改和改造问题226. 翻转二叉树106. 从中序与后序遍历序原创 2021-12-15 10:37:07 · 1806 阅读 · 0 评论 -
算法分析之二叉树遍历
二叉树的基础知识已经在上一篇文章算法分析之二叉树学习过了,这篇文章主要是二叉树的遍历方式,包括递归和迭代版本。文章目录一、二叉树的遍历二、二叉树的递归遍历1. 二叉树的前序遍历2. 二叉树的中序遍历3. 二叉树的后序遍历三、二叉树的迭代遍历1. 二叉树的前序遍历2. 二叉树的中序遍历3. 二叉树的后序遍历四、二叉树的层序遍历1. 层序遍历的迭代实现2. leetcode关于层序遍历的算法107. 二叉树的层序遍历 II199. 二叉树的右视图一、二叉树的遍历二叉树的遍历方式主要有两种:深度优先遍历原创 2021-12-14 14:59:58 · 2560 阅读 · 2 评论 -
算法分析之二叉树
文章目录一、二叉树的定义二、二叉树的种类1. 满二叉树2. 完全二叉树3. 二叉搜索树4. 平衡二叉搜索树三、二叉树的存储方式四、二叉树的遍历方式一、二叉树的定义二叉树在算法中是比较常用的数据结构,根据二叉树的遍历算法,在算法题中遇到二叉树经常优先考虑递归算法。同时二叉树中的二叉搜索树也是常用的,主要结合中序遍历有序的特性。二叉树结构:public class TreeNode { int val; TreeNode left; TreeNode right; Tre原创 2021-12-13 16:08:45 · 1884 阅读 · 0 评论