![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
专题讲解
文章平均质量分 83
zcz5566719
这个作者很懒,什么都没留下…
展开
-
【系统设计】你管这破玩意儿叫负载均衡?
文章目录What and Why七层负载均衡Nginx初入江湖:加一层Nginx小试牛刀:动静分离CDN瓶颈分析:socket连接池四层负载均衡LVSLVS的工作原理What and Why负载均衡和反向代理其实是非常融合的概念。在后端的设计,为了提高系统的可用性,我们往往会使用多个服务器实例给 client 提供服务,但是这些对于客户端是不应该有感知的。也就是说客户端在发送请求的时候,是通过一个网址,网址在进行DNS的解析以后会被发送到一个固定的IP地址上(先不考虑DNS的路由选择)。反向代理的目的原创 2021-10-08 17:12:29 · 1557 阅读 · 0 评论 -
【专题讲解】序列DP
文章目录LIS最长递增子序列的长度最长递增子序列的个数354. 俄罗斯套娃信封问题编辑距离打家劫舍类740. 删除并获得点数446. 等差数列划分 II - 子序列什么是序列DP序列dp是一类最长,最多的子序列的相关问题。 状态转移方程中 dp[i] 表示前i个元素a [0],a [1],…a [i-1]的某种性质, 坐标型 dp 状态转移方程中f [i]表示以元素a [i]结尾的某种性质。LIS最长递增子序列的长度最长递增子序列的个数class Solution { public原创 2021-10-05 11:34:17 · 1163 阅读 · 0 评论 -
你需要知道的InnoDB引擎100问
Innodb读书笔记文章目录第一章 体系结构与存储引擎第二章 InnoDB引擎第五章 索引与算法第六章 锁第七章 事务第一章 体系结构与存储引擎介绍Innodb的存储引擎InnoDB:支持事务,主要是面向在线事务处理(online transaction processing OLTP 对应的还有OLAP, online analytical processing 在线分析处理 更多用在数仓上,需要负载的sql语句。)的应用。 InnnDB通过MVCC来获得高并发性,实现了sql的四种隔.原创 2021-07-11 00:07:34 · 212 阅读 · 1 评论 -
【专题总结】数据流问题
文章目录295. 数据流的中位数480. 滑动窗口中位数1825 求出 MK 平均值数据流问题是一个比较常见的问题了。特点是数据是流的形式不断的加入的。因此我们在处理的时候需要逐渐添加数据到数据结构中。这类题目的特点一般是需要寻找中位数,众数,均值,topK这几类。295. 数据流的中位数既然希望我们寻找数据流中的中位数,那我们比较好的做法就是使用两个堆分别维护一半的最小值,和一半的最大值。我们可以认为认为的允许保存最小的K个元素的最大堆比保存最大的K个元素的最小堆能最多多一个元素。否则就需要原创 2021-04-28 12:02:02 · 294 阅读 · 0 评论 -
【acwing】数位dp的思路
偷师acwing,学习数位DP的策略。引言数位dp的特点,求解在一个区间内满足某特性的数字的个数。数位dp具有两个特点,第一个,利用前缀和的特点求解区间[left, right]的问题,分别求出【0,left-1】和【0,right】的个数。第二个特点是树,对每一位依次进行分析。例题 不降数字给定区间[l, r]求区间内所有是整数,满足低位不小于高位的数值的个数。如,1234,2333.首先我们定义一个dp[i][j]表示在还有i位的情况下,最高位位j的情况下满足的个数。显然我们可以知道dp[i原创 2020-06-19 22:13:08 · 303 阅读 · 0 评论 -
【专题讲解】排序那些事儿
文章目录排序方法比较快排归并算法TopK问题堆排序快排优化时间复杂度的计算主定理写在前面:从2020年的3月疫情在家,闲着无聊开始研究研究算法导论和刷题。一下子一年过来了,也到了准备春招的时候。最开始的文章都是python写的,因为都还是按照算法岗进行准备的。后来发现似乎还是开发岗更符合实际,因此也就开始用java进行刷题。在换了一种语言以后,更加觉着其实算法是与编程语言完全无关的,更多的是一种思想。近期会重新整理我写过的算法笔记。对于古老的版本会尝试补上java版本。排序方法比较首先,在面试中,排序原创 2021-03-14 13:52:54 · 104 阅读 · 0 评论 -
【专题讲解】组合数相关的问题
文章目录组合数模板快速幂利用逆元的组合数模板Lucas定理的组合数模板判断组合数奇偶组合数模板注意复杂度,O(N2)O(N^2)O(N2),并且求解范围要求n,m小于2000。import java.util.Scanner;public class Main{ static final int N=2005; static final int mod=(int)1e9+7; static int c[][]=new int[N][N];原创 2020-12-10 20:25:59 · 153 阅读 · 0 评论 -
【线段树】区间加和区间乘的操作并返回区间和
文章目录什么是线段树线段树类的格式在例题中使用线段树板子题1:区间加板子题2:区间加和区间乘什么是线段树线段树的思想有点类似于树状数组,都是降低区间和等的操作复杂度。对于一个正常的序列,很难维护对区间信息,如一个区间的和,区间的最值等问题。但是线段树可以以O(lgn)O(lgn)O(lgn)的复杂度维护这些。下图是来源与网络的一张线段树的图片,首先我们明确一下线段树的节点的结构。// l,r 分别表示当前树节点表示的左右区间的边界,val是当前节点所代表的区间的区间信息// lazytag是这个原创 2020-10-27 22:34:25 · 638 阅读 · 2 评论 -
【算法专题讲解】数学问题
引言本部分内容主要针对算法中可能遇到的数学问题。大多都是属于轮子,作为一个工具使用。文章目录引言数论质数的判定分解质因数埃氏筛法求质数 ——首选线性筛求质数求所有的约数约数个数和约数之和组合计数高斯消元简单博弈论数论质数的判定采用试除法,时间复杂度是O(n)O(\sqrt{n})O(n)def isprime(x): if x<2: return Fasle i = 2 while i<=n/i: if x%i == 0: return False i +=原创 2020-07-17 15:19:12 · 278 阅读 · 0 评论 -
【专题讲解】搜索与图论
引言acwing基础课程第三章的内容整理,主要是对于图的搜索有关的问题。关于dfs和bfs的方法会简略的写一些,主要是最短路和最小生成树的问题。文章目录引言1. DFS与BFS无向图的存储例题2. 有向树与图的遍历:拓扑排序3. 最短路4. 最小生成树5. 二分图:染色法、匈牙利算法1. DFS与BFS无向图的存储首先是需要解决图的存储问题。我一般习惯用python中的字典解决,也可以用数组的方式。#--------------------------字典存储的方法---------------原创 2020-07-14 17:58:56 · 248 阅读 · 0 评论 -
【专题讲解】树状数组
引言树状数组的目的:快速求前缀和,修改某一个数普通数组:快速求前缀和O(n)O(n)O(n),修改某一个数O(1)O(1)O(1)树状数组:快速求前缀和,修改某一个数 都是O(lgn)O(lgn)O(lgn)树状数组的示意图树状数组的特点在于,利用了二进制的性质,可以很方便的实现查询和修改。通过上图我们可以清晰的看出,关键点在于每个索引转为为二进制以后的lowbit是多少,每个数组维护的区间和的区间长度恰好是lowbit,区间是从(index-lowebit, index],注意左开右闭。主原创 2020-07-07 17:23:19 · 415 阅读 · 0 评论 -
【acwing】数据结构
引言主要讲解在 oj 的面试背景下,如何处理数据结构。单链表双链表例题1:数组模拟单链表因为动态链表比较复杂,每次需要重建的时间成本比较大。因此在题目中一般采用数组模拟静态链表的操作。定义:e[index]表示编号为index的节点的数值,ne[index]表示编号为index的节点的子节点,每次最后还需要index++表示生成新的数组位置。e = [0]*100000ne = [0]*100000index = 0head = -1N = int(input())def原创 2020-07-03 16:19:31 · 290 阅读 · 0 评论 -
【专题讲解】状态压缩DP(二进制)
引言状态压缩DP的特点一般就是考虑成,do or not do的问题。也就是二进制的问题。状态压缩DP例题1,蒙德里安的梦想这个题目,我们只需要分析出,满足条件的1*2的长方形的摆放即可。# 状态压缩DP# dp[i][j] 表示在第i列,出现第j个状态。 1表示出现,0表示为出现。# 状态j的定义是,(10010)这种二进制对应的十进制# 由于每个的长度是1*2,因此只与前一个有关,当前列的最终状态是,前一列新添的并上这一列新添加的# 注意两个不可能的最终状态,1.矛盾 2. 连续的0原创 2020-06-28 01:09:10 · 260 阅读 · 0 评论 -
【专题讲解】计数类dp,区间dp与树形DP
引言动态规划部分的第三章节,前面已经讲了背包问题和线性dp问题。计数类dp是求得方案的个数区间dp是设计dp[i][j]表示从 i 开始到 j 的属性值。计数DP例题,整数拆分思路一,背包问题一个容量为N的背包,物品的体积是1-N,问恰好装满背包的方案数。完全背包。dp = [0]*(V+1)dp[0] = 0mod = 10**9+7for i in range(N): for j in range(v, V+1): dp[j] = (dp[j]+dp[j-v])%mod原创 2020-06-26 19:15:53 · 641 阅读 · 0 评论 -
【专题讲解】线性DP
引言状态转移方法是一个线性的转移,每一行依次求解。例题:三角形最大路径最长上升子序列和如何得到该序列一个非dp的nlgn算法最长子序列编辑距离多次编辑距离例题1:三角形最大路径这道题目思路不难,但是细节很多,需要统一处理存储的三角形和dp的坐标对应的关系。# 自下往上做更方便N = int(input())# 这里我多开了一些dp的空间,这样可以简化初始化的问题dp = [[0]*(N+1) for _ in range(N+2)]# 这里注意好坐标对应,从1开始,到N原创 2020-06-26 17:30:45 · 1402 阅读 · 0 评论 -
【专题讲解】背包问题
引言背包问题可以分为:01背包 (优化:倒序)完全背包 (优化:正序)多重背包多重背包的优化01背包有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。特点:每个物品的数量只有一个。状态:dp[i][j]考虑前 i 个物品,空间为 j没有进行优化:第二层循环正序dp[i][j] = max(dp[i-1][j], dp[i-1][j-vi]+原创 2020-06-24 01:47:48 · 1175 阅读 · 0 评论 -
【专题讲解】动态规划3——股票问题
引言股票问题是dp问题中很重要的一类问题,其主要思想是每次分为持有股票和持有现金两个状态,这两个状态分别可以从前一天保持和当天改变得到。基本方法 :dp[i][0][k] 表示在第i天,持有现金的情况,且此时还可以进行的交易次数数kdp[i][1][k] 表示在第i天,持有股票的情况,且此时还可以进行的交易次数数k初始值设定:一般情况下,我个人喜欢对dp进行padding,也就是构造n+1行2列的dp。初始时,不可能持有股票,因此dp[0][1] = float('-inf')。而不持有股票时原创 2020-05-27 21:19:15 · 1011 阅读 · 0 评论 -
【专题讲解】动态规划2
整数分解整数分解同样是一类动态规划常见的题目,因为大数的问题往往可以从小数中推出分割整数的最大乘积就按照思路大数的问题都可以转换为小数的问题思考。dp[i]表示i这个数字分解完成的最大乘积,考虑i = (i-j) + j。其中j部分可以考虑两种情况,一个是i本身,另外一个是dp[j]。因为我们很难保证对j进行拆解得到的解比j本身要大。因此转移方程dp[i] = max(dp[i], dp[i-j]*j, dp[i-j]*dp[j])class Solution: def integerB原创 2020-05-18 20:16:14 · 136 阅读 · 0 评论 -
【专题总结】位运算
加速运算神器,位运算首先我们需要熟悉python的位运算符:a = 0011 1100b = 0000 1101位运算常用的运算符包括&(按位与), | (按位或),~(按位非),^(按位异或),<< (有符号左移位) ,>>(有符号右移位)。下面简单的记录一些运用位运算的例子:判断奇数偶数 (与 &) def isodd(x): r...原创 2020-03-21 00:35:55 · 213 阅读 · 0 评论 -
【专题讲解】单调栈
单调栈单调栈的核心思想是维护一个单调递增或者单调递减的双向队列。队列中存储数组的索引值。我们以一道基本例题为例,了解单调栈的简单框架。这道题目是一道可以用单调栈解决的问题。我们维护一个序列,如果进来的数字比队伍右侧索引对应的数字大,弹出队列右侧。class Solution(object): def dailyTemperatures(self, T): # 单调...原创 2020-04-26 23:48:53 · 159 阅读 · 0 评论 -
【专题讲解】搜索专题:BFS,DFS,回溯
BFS应该注意的是,使用 BFS 只能求解无权图的最短路径,无权图是指从一个节点到另一个节点的代价都记为 1。在程序实现 BFS 时需要考虑以下问题:队列:用来存储每一轮遍历得到的节点;标记:对于遍历过的节点,应该将它标记,防止重复遍历。例题 单词接龙一道很有意思的题目,思想较为简单,每次查找是否存在一个只有一个不同的字符的单词。如果有存入队列,并且查找邻居。有一个难点在于,如何查...原创 2020-04-26 01:08:25 · 228 阅读 · 0 评论 -
【专题讲解】树专题:BST与前缀树Trie
本文是树专题的第三篇文章一、 二叉查找树(BST)二叉查找树(BST)的主要性质:根节点大于等于左子树所有节点,小于等于右子树所有节点。二叉查找树中序遍历有序。因此常常可以先暴力中序遍历实现排序,再进行操作。常见题目查找元素等,可以使用递归思路解决。判断上和root.val比较。构造bst类型,一般就二分思想结合递归。在二叉树中查找两个元素。一般只能采用遍历的方法的得到有序数...原创 2020-04-17 16:39:08 · 240 阅读 · 0 评论 -
【专题讲解】树专题:二叉树的四种遍历
Leetcode 112 路径总和又是一道二叉树的题目,这次我们来总结二叉树的深度搜索,广度搜索:二叉树的遍历广度优先遍历breadth first traversal:又称层次遍历,从树的根节点(root)开始,从上到下,从左到右遍历整个树的节点。深度优先遍历depth first traversal:对于一颗二叉树,深度优先遍历是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。...原创 2020-03-17 23:47:03 · 113 阅读 · 0 评论 -
【专题讲解】树专题:递归思路处理树
树专题一:递归思路我们都以二叉树作为一个标准的例子分析树的问题常用的方法。首先我们先来分析递归的方法。有一个很好的二叉树的三步走战略,我觉着很值得学习。「三步走」方法的三步分别为:【拆解子问题】:将问题尽可能地划分为子问题。 复杂问题的子问题很可能不止一个。要划分到不能再划分为止。这一步的目的是找出所有的子问题。【抽取全局变量】:如果题目所求的结果涉及到所有子树,考虑使用全局变量。 如...原创 2020-04-14 17:10:29 · 247 阅读 · 0 评论 -
【专题讲解】手撕堆
引入问题是leetcode347题,前K个高频元素说一千到一万还是一个堆问题。虽然python有堆函数可以直接调用。但是我们还是学习一下利用堆实现优先队列的方法。堆性质:堆必须是完全二叉树(保证利用数组存储堆时,由下标i快速找到父节点(i−1)/2,左右子节点2∗i+1,2∗i+2。(从0开始存储)堆中每个节点必须大于等于(小于等于)子节点支持插入、删除堆顶元素(并且要堆化)...原创 2020-04-09 12:02:23 · 132 阅读 · 0 评论 -
【专题讲解】并查集union-find
我们还是一道题目为例子。这是399题,除法求值。是一道带权值的并查集题目。并查集算法是说可以将相互连通的节点都归类到一个根节点上。这样可以很快的判断两个触电之间时候属于同一类(是否连通)。一般的算法包括普通的并查集算法,带权值的quick-union算法,和含有路径压缩的算法。这道题目还一个难点在于定义每条边的权值。这里的每个value是当前节点相对于父节点的大小。具体的可以参考算法4.这...原创 2020-04-08 21:39:43 · 175 阅读 · 0 评论 -
【动态规划专题】字符串匹配,编辑距离
字符串匹配问题是dp问题中一类一种经典问题,包括了最长匹配字符串,和编辑距离等。我们以编辑距离为例之所以将这几个问题放在一起讨论,因为都是有相同的dp设计思路,和状态转移方程的设计。状态设计思路:二维矩阵dp[i][j]表示word1前i个字符与word2的前j个字符下的子问题,在本问题中就是代表 word1 到i位置转换成 word2 到j 位置需要最少步数。状态转移方程:如果wor...原创 2020-04-06 17:17:03 · 354 阅读 · 0 评论 -
【Top -K问题】BFPRT算法与堆
问题背景:在一大堆数中求其前k大或前k小的问题,简称TOP-K问题。题目链接这是一类很经典的问题可以有多种解决的方法,这些方法中包含了一些巧妙的数据结构和算法思想。因此简单的排序取值的方法就不再说了。方法一:利用快排实现查找。按照从大到小排序,然后每次计算多少大于标定值的,每次缩小搜查范围。class Solution(object): def findKthLargest(s...原创 2020-04-04 21:14:36 · 247 阅读 · 0 评论 -
【专题:反转链表】递归与迭代
本文受labuladong的启发反转链表可以说是链表操作的典型,本文从迭代和递归两个角度来分析反转链表的三个问题。问题一:反转整个链表问题2递归:需要想清楚函数的作用。输入一个节点 head,将「以 head 为起点」的链表反转,并返回反转之后的头结点。最难理解的部分在下面两张图说的清清楚楚对于反转前一部分的情况我们需要注意后继节点。 def reversel...原创 2020-04-02 23:08:03 · 133 阅读 · 0 评论 -
【leetcode专题系列】链表
203 删除链表元素class Solution(object): def removeElements(self, head, val): """ :type head: ListNode :type val: int :rtype: ListNode """ pre = ListNode...原创 2020-04-02 00:50:23 · 86 阅读 · 0 评论 -
【专题】组合总和(dfs)
Leetcode 组合总和专题组合总和专题在leetcode上总共有四道,本专题集中解决。1第一题:无重复数组, 可重复使用数字, 集合不能重复最基础的题目,主要思想是利用dfs和回溯。每种方法都考虑并且去尝试遍历所有可能。class Solution(object): def combinationSum(self, candidates, target): "...原创 2020-03-28 22:09:14 · 186 阅读 · 0 评论 -
【专题讲解】二分法查找与搜索
二分法查找主要受到labuladong的启发,所以相当于是一种python实现 def binary(self, target, nums): # 二分查找,模板 right = len(nums)-1 left = 0 while left<=right: mid = left + (righ...原创 2020-03-28 17:33:31 · 618 阅读 · 1 评论