自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 收藏
  • 关注

原创 CSDN竞赛第68期记录

需要1秒,从n号闸门到公主所在的位置也需要1秒,从p号闸门到p+1或p-1号闸门都需要1秒。波斯王子要去救被贾法尔囚禁的公主,但贾法尔用黑魔法在他面前设置了编号从1到n的n道闸门。从王子的位置到1号闸门。现在给出操作序列数据库和每一轮游戏的起始操作序列编号和结束操作序列编号,求每轮游戏结束时从左到右的小球编号。在王子做出动作选择后,闸门也可能会有关闭和开启的动作,如果王子做完动作后,其所在的闸。每个操作序列编号对应的操作,而每个操作序列编号对应的操作就是对该次操作指定的两个编号的位置上的小球进行对。

2023-08-05 19:12:18 410

原创 算法笔记-lc-870. 优势洗牌(中等)

给定两个大小相等的数组 nums1 和 nums2,nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。显然,对于任意一个t=nums2[i] 而言,我们应当在候选集合中选择比其大的最小数,若不存在这样的数字,则选择候选集合中的最小值。输入:nums1 = [12,24,8,32], nums2 = [13,25,32,11]输入:nums1 = [2,7,11,15], nums2 = [1,10,4,11]输出:[2,11,7,15]

2022-10-12 09:48:43 311 1

原创 算法笔记-lc-927. 三等分(困难)

我们尝试找到arr 中第 1 个 1 出现的位置 first,第 partial+1 个 1出现的位置 second 以及第2×partial+1 个 1出现的位置third。但是注意到,数组的末尾是无法改变的,因此区间[third,arr.length−1] 所表示的二进制值可以固定。此外,前导零也是被允许的,所以 [0,1,1] 和 [1,1] 表示相同的值。输入:arr = [1,0,1,0,1]输入:arr = [1,1,0,1,1]输入:arr = [1,1,0,0,1]输出:[-1,-1]

2022-10-09 23:01:41 285

原创 算法笔记-lc-1800. 最大升序子数组和(简单)

[TOC](算法笔记-lc-1800. 最大升序子数组和(简单))

2022-10-08 23:48:59 200

原创 spring到底为什么要用三级缓存?

A 依赖于 B,B 依赖于 A,比如下面代码}

2022-10-08 23:48:45 1026

原创 算法笔记-lc-811. 子域名访问计数(中等)

输出:[“901 mail.com”,“50 yahoo.com”,“900 google.mail.com”,“5 wiki.org”,“5 org”,“1 intel.mail.com”,“951 com”]解释:按照前文描述,会访问 “google.mail.com” 900 次,“yahoo.com” 50 次,“intel.mail.com” 1 次,“wiki.org” 5 次。对于格式"rep d1.d2",有两个子域名"d1.d2" 和"d2",每个子域名各被访问 rep 次。

2022-10-08 10:30:39 125

原创 算法笔记-lc-921. 使括号有效的最少添加(中等)

如果不为 0,则说明还有剩下的左括号没有匹配,对于每个剩下的左括号都需要添加一个右括号才能匹配,此时需要添加的右括号个数为剩下的左括号个数,将需要添加的右括号个数加到添加次数。对于括号匹配的题目,常用的做法是使用栈进行匹配,栈具有后进先出的特点,因此可以保证右括号和最近的左括号进行匹配。例如,如果 s = “()))” ,你可以插入一个开始括号为 “(()))” 或结束括号为 “())))”。如果左括号的个数大于 0,则前面有左括号可以匹配,因此将左括号的个数减 1,表示有一个左括号和当前右括号匹配;

2022-10-07 22:12:14 92

原创 算法笔记-lc-1784. 检查二进制字符串字段(简单)

如果 s 中 由连续若干个 ‘1’ 组成的字段 数量不超过 1,返回 true​​​。否则,返回 false。如果 s 包含 零个或一个由连续的 ‘1’ 组成的字段 ,返回 true​​​。否则,返回 false。解释:由连续若干个 ‘1’ 组成的字段数量为 2,返回 false。给你一个二进制字符串 s ,该字符串 不含前导零。s[i]​​​​ 为 ‘0’ 或 ‘1’输入:s = “1001”输入:s = “110”s[0] 为 ‘1’时间复杂度:O(n)空间复杂度:O(1)

2022-10-06 21:42:00 114

原创 算法笔记-lc-777. 在LR字符串中交换相邻字符(简单)

由于每次移动操作只是交换两个相邻字符,不会增加或删除字符,因此如果可以经过一系列移动操作将start 转换成 end,则start 和 end 满足每一种字符的数量分别相同,字符‘R’ 的相对顺序相同,且每个‘L’ 在end 中的下标小于等于对应的‘L’ 在 start 中的下标,以及每个 ‘R’ 在end 中的下标大于等于对应的 ‘R’ 在 \textit{start}start 中的下标。如果一个字符‘L’ 左侧的相邻字符是‘X’,则将字符 ‘L’ 向左移动一位,将其左侧的 ‘X’ 向右移动一位;

2022-10-06 21:41:22 138

原创 算法笔记-lc-1694. 重新格式化电话号码(简单)

我们首先对给定的字符串number 进行一次遍历,找出所有的数字,并记录在字符串 digits 中。注意,重新格式化过程中 不应该 生成仅含 1 个数字的块,并且 最多 生成两个含 2 个数字的块。步骤 2:剩下 4 个数字,所以将它们分成两个含 2 个数字的块。这 2 块分别是 “45” 和 “67”。步骤 2:剩下 3 个数字,将它们放入单个含 3 个数字的块。步骤 3:剩下 2 个数字,将它们放入单个含 2 个数字的块。当 n≤4 时,我们根据题目的要求,将剩余的 n 个字符进行分块,并结束遍历。

2022-10-05 20:45:35 91

原创 大小根堆和java中双优先队列的应用

完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。第一行一个数字n,表示序列nums的长度,之后一行一个长度为n序列,每个数字用空格分割,求所有子序列的中位数之和。同理,大根堆也是一个完全二叉树,并且任何子树的最大值是它的根节点。首先小根堆是一个完全二叉树,并且任何子树的最小值是它的根节点。除了叶子节点外,每个节点的两个子节点都全的二叉树。

2022-10-05 20:45:15 148

原创 十字链表简介与实现(Java)

拿图 3 中的顶点 V1 来说,通过构建好的十字链表得知,以该顶点为弧头的顶点只有存储在数组中第 3 位置的 V4(因此该顶点的入度为 1),而以该顶点为弧尾的顶点有两个,分别为存储数组第 1 位置的 V2 和第 2 位置的 V3(因此该顶点的出度为 2)。十字链表存储有向图(网)的方式与邻接表有一些相同,都以图(网)中各顶点为首元节点建立多条链表,同时为了便于管理,还将所有链表的首元节点存储到同一数组(或链表)中。hlink 指针:用于链接下一个存储以首元节点为弧头的顶点的节点;

2022-10-04 19:57:17 400

原创 算法笔记-lc-面试题 01.09. 字符串轮转(中等)

首先,如果 s1和 s2的长度不一样,那么无论怎么轮转,s1都不能得到 s2 ,返回false。在长度一样(都为 n)的前提下,假设 s1轮转 i位,则与 s2中的某一位字符 s2[j] 对应的原 s1 中的字符应该为s1[(i+j)modn]。基于此,我们可以使用「字符串哈希」进行求解:先计算 s2 的字符串哈希值 t,然后构造出 s1 + s1 的哈希数组和次方数组,在两数组中检查是否存在长度为 n 的连续子段的哈希值 cur 与 t 相等。空间复杂度:O(n),其中 n 是字符串 s1 的长度。

2022-10-04 19:57:03 320

原创 算法笔记-lc-面试题 01.08. 零矩阵(简单)

我们可以用矩阵的第一行和第一列代替方法一中的两个标记数组,以达到 O(1) 的额外空间。空间复杂度:O(m+n),其中 m 是矩阵的行数,n 是矩阵的列数。空间复杂度:O(m+n),其中 m 是矩阵的行数,n 是矩阵的列数。时间复杂度:O(mn),其中 mm 是矩阵的行数,n 是矩阵的列数。时间复杂度:O(mn),其中 m 是矩阵的行数,n 是矩阵的列数。时间复杂度:O(mn),其中 m 是矩阵的行数,n 是矩阵的列数。时间复杂度:O(mn),其中 m 是矩阵的行数,n 是矩阵的列数。

2022-10-03 21:00:18 111

原创 跳表的简介与实现

跳表全称为跳跃列表,它允许快速查询,插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是通过维护一个多层次的链表,且每一层链表中的元素是前一层链表元素的子集(见右边的示意图)。一开始时,算法在最稀疏的层次进行搜索,直至需要查找的元素在该层两个相邻的元素中间。这时,算法将跳转到下一个层次,重复刚才的搜索,直到找到需要查找的元素为止。一张跳跃列表的示意图。每个带有箭头的框表示一个指针, 而每行是一个稀疏子序列的链表;底部的编号框(黄色)表示有序的数据序列。

2022-10-03 20:59:57 138

原创 算法笔记-lc-752. 打开转盘锁(中等)

如果对于任意的两个节点 x 和 y,并且 x 到 y 有一条长度为D(x,y) 的有向边,H(x)−H(y)≤D(x,y) 恒成立,并且 H(t)=0,那么称启发函数 H(x) 是一致的(consistent heuristic)。在搜索的过程中,设当前搜索到的数字为 status,旋转的次数为step,我们可以枚举 status 通过一次旋转得到的数字。在 A* 算法中,我们需要使用四个距离函数F(x),G(x),H(x),H∗(x),其中 F(x),G(x),H(x) 是可以求出的,而 H^

2022-10-02 21:29:18 457

原创 浅析控制反转

控制反转 (Inversion of control) 并不是一项新的技术,是 Martin Fowler 教授提出的一种软件设计模式。那到底什么被反转了?获得依赖对象的过程被反转了。控制反转 (下文统一简称为 IoC) 把传统模式中需要自己通过 new 实例化构造函数,或者通过工厂模式实例化的任务交给容器。

2022-10-02 21:28:41 615

原创 算法笔记-lc-面试题 17.09. 第 k 个数(中等)

−1]×3,dp[p5−1]×5,dp[p7−1]×7 都小于或等于 dp[i−1]。令 dp[i]=min(dp[p3]×3,dp[p5]×5,dp[p7]×7),则dp[i]>dp[i−1] 且 dp[i] 是大于dp[i−1] 的最小的数。对于 i>1,在计算 dp[i] 时,指针px(x∈{3,5,7}) 的含义是使得 dp[j]×x>dp[i−1] 的最小的下标 j,即当j≥px时dp[j]×x>dp[i−1],当 j

2022-10-01 11:39:57 360

原创 最大公约数的四种方法

求两数的最大公约数,一共有四种方法:暴力穷举法、更相减损法、辗转相除法、stein 算法,小女不才,花了几天的时间终于把这几种方法全部弄明白,现在就把它们全部分享出来。首先,假设被求的两个数为 x、y,且 x > y。最大公约数 d = gcd (x , y)

2022-10-01 11:39:01 11215

原创 算法笔记-lc-面试题 17.19. 消失的两个数字(困难)

[TOC](算法笔记-lc-面试题 17.19. 消失的两个数字(困难))

2022-09-30 00:04:17 128

原创 LVS是什么及作用?

当请求来到时,Diretor server上处理的程序将数据报文中的目标地址(即虚拟IP地址)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Diretor Server,然后Diretor server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。像有三个小区,但是工作的时间和休息的时间不一样,第一个是白天工作,一个是晚上工作,一个是比较散时间,

2022-09-30 00:03:59 441

原创 算法笔记-lc-面试题 01.02. 判定是否互为字符重排(简单)

[TOC](算法笔记-lc-面试题 01.02. 判定是否互为字符重排(简单))

2022-09-28 00:24:02 1604

原创 nginx 挂了怎么办?

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果一个系统能够一直提供服务,那么这个可用性则是百分之百,但是天有不测风云。所以我们只能尽可能的去减少服务的故障。

2022-09-28 00:17:38 1984

原创 分布式选举算法总结

ZAB 选举算法的核心是“少数服从多数,ID 大的节点优先成为主”,因此选举过程中通过 (vote_id, vote_zxID) 来表明投票给哪个节点,其中 vote_id 表示被投票节点的 ID,vote_zxID 表示被投票节点的服务器 zxID。但是,当选主成功后,有且仅有一个节点成为主节点,其他所有节点都是普通节点。其次,任意一个比当前主节点 ID 大的新节点或节点故障后恢复加入集群的时候,都可能会触发重新选举,成为新的主节点,如果该节点频繁退出、加入集群,就会导致频繁切主。数据库集群、管理集群…

2022-09-27 22:52:37 1586

原创 Protocol Buffer详解

Protocol Buffer是一种支持多平台、多语言、可扩展的的数据序列化机制,相较于XML来说,protobuf更小更快更简单,支持自定义的数据结构,用protobu编译器生成特定语言的源代码,如C++、Java、Python,目前protoBuf对主流的编程语言都提供了支持,非常方便的进行序列化和反序列化。这里简单的给出一个例子,是一个搜索请求的message格式。

2022-09-27 17:10:23 4106

原创 算法笔记-lc-1114. 按序打印(多线程简单题)

[TOC](算法笔记-lc-1114. 按序打印(多线程简单题))

2022-09-26 23:43:57 1671

原创 Redis中的红锁

分布式锁,当我们请求一个分布式锁的时候,成功了,但是这时候slave还没有复制我们的锁,masterDown了,我们的应用继续请求锁的时候,会从继任了master的原slave上申请,也会成功。这里获取锁的尝试时间要远远小于锁的超时时间,防止某个masterDown了,我们还在不断的获取锁,而被阻塞过长的时间。如果锁获取失败了,不管是因为获取成功的节点的数目没有过半,还是因为获取锁的耗时超过了锁的释放时间,都会将已经设置了key的master上的key删除。这就会导致,同一个锁被获取了不止一次。

2022-09-26 23:43:37 4200 1

原创 四种常见的选举机制

我们探讨这几个集群的选举机制,其实就是探讨它们的高可用性。如果集群中的某些节点挂了,如何保证可用性?这个问题是分布式系统面临的三大问题之一。Zookeeper的leader选举机制,是这四种集群中最复杂的选举机制,同时也是这四种集群中最接近paxos算法的实现。相比于Zookeeper的选举机制,kafka集群、redis集群、Eureka集群的选举机制简单了许多。

2022-09-26 10:47:20 1896

原创 算法笔记-lc-788. 旋转数字(中等)

[TOC](算法笔记-lc-788. 旋转数字(中等))

2022-09-25 23:36:35 1630

原创 算法笔记-lc-1652. 拆炸弹(简单)

[TOC](算法笔记-lc-1652. 拆炸弹(简单))

2022-09-25 23:13:54 1555

原创 算法笔记-lc-707. 设计链表(中等)

实现addAtIndex(index, val) 时,如果 index 是有效值,则需要找到原来下标为 index 的节点的前驱节点 pred,并创建新节点to_add,将to_add 的后继节点设为 pred 的后继节点,将 pred 的后继节点更新为to_add,这样就将to_add 插入到了链表中。然后找到下标为index 的节点的前驱节点 pred,通过将 pred 的后继节点更新为pred 的后继节点的后继节点,来达到删除节点的效果。实现双向链表,即每个节点要存储本身的值,后继节点和前驱节点。

2022-09-24 20:00:32 1828

原创 CSDN线上竞赛编程第六期参赛心得

偶然间被朋友告知CSDN有算法竞赛,被推了链接就抱着试一试得心态。CSDN线上竞赛编程第六期。

2022-09-24 11:15:21 2545 1

原创 P2P 网络核心技术:Gossip 协议

Gossip 协议规定,节点会定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤,因此就不可避免的存在消息重复发送给同一节点的情况,造成了消息的冗余,同时也增加了收到消息的节点的处理压力。而且,由于是定期发送而且不反馈,因此,即使节点收到了消息,还是会反复收到重复消息,加重了消息的冗余。可见,Pull 的收敛速度大于 Push ,而每个节点在每个周期被感染的概率都是固定的 p (0

2022-09-23 22:20:29 1881

原创 算法笔记-lc-854. 相似度为 K 的字符串(困难)

[TOC](算法笔记-lc-854. 相似度为 K 的字符串(困难))

2022-09-23 21:55:10 1827

原创 Spring Bean的生命周期

Spring作为当前Java最流行、最强大的轻量级框架,我们在面试框架时会经常被问到,很多时候回答的不完整,下面针对该问题,我详细整理出该如何回答以及面试官想要了解的你对知识理解的深度。

2022-09-23 15:22:56 1573

原创 spring事务的7种传播机制

若B方法抛出异常,A方法进行捕获,A会抛出异常,因为C2标志回滚,C1标志提交,产生冲突。A、B不可操作同一条记录,因为A是事务执行,B在A尚未提交前再操作同一条记录,会产生死锁。若B方法抛出异常,A方法进行捕获,B方法回滚,A方法不受B异常影响。若B方法抛出异常,A方法进行捕获,B方法回滚,A方法正常执行。若当前存在事务,则加入该事务,若不存在事务,则新建一个事务。若B方法抛出异常,A、B方法都没有处理,则A、B都会回滚。若B方法抛出异常,B方法内部捕获,A、B都不会回滚。

2022-09-22 22:22:02 1640

原创 算法笔记-lc-1640. 能否连接形成数组(中等)

否则我们找到对应的数组 \textit{pieces}[j]pieces[j],然后将它与arr[i] 及之后的整数进行比较(在比较过程中,如果判断相等不成立,直接返回 false),判断都相等后,将 i 相应地向后移。起始对 pieces 进行排序(根据pieces[i] 的首位元素排升序),从前往后处理每个 arr[i] 尝试匹配,先通过二分找到合适的pieces[j](即满足首位元素与 arr[i] 相同的pieces[j]),并进行连续段的匹配,若匹配失败直接返回 false。

2022-09-22 22:19:41 1539

原创 MySQL存储过程语法

与之对应的,就有iterate(继续循环)——类比java的continue。在语法中,变量声明、游标声明、handler声明是必须按照先后顺序书写的,否则创建存储过程出错。需要说明,loop是死循环,需要手动退出循环,我们可以使用leave来退出。– 需求:入职年限年龄38并 40元老。– 查看全局变量character_set_client的值。此语法是不仅可以用在存储过程,查询语句也可以用!– 查看全局变量中变量名有char的记录。不需要提前声明,使用即声明。

2022-09-21 23:42:33 3130

原创 服务器三种常见的限流算法

经过上述的描述,好像漏桶、令牌桶比时间窗口类算法好多了,那么时间窗口类算法是不是就没啥用了呢?其实并不是,虽然漏桶、令牌桶对比时间窗口类算法对流量的整形效果更好,但是它们也有各自的缺点,例如令牌桶,假如系统上线时没有预热,那么可能会出现由于此时桶中还没有令牌,而导致请求被误杀的情况;而漏桶中由于请求是暂存在桶中的,所以请求什么时候能被处理,则是有延时的,这并不符合互联网业务低延时的要求。所以令牌桶、漏桶算法更适合阻塞式限流的场景,即后台任务类的限流。

2022-09-21 22:23:59 2024

原创 算法笔记-lc-698. 划分为k个相等的子集(难度中等)

否则我们需要得到 k 个和为 per= all/k的集合,那么我们每次尝试选择一个还在数组中的数,若选择后当前已选数字和等于 per 则说明得到了一个集合,而已选数字和大于per 时,不可能形成一个集合从而停止继续往下选择新的数字。然后我们用dp[S] 来表示在可用的数字状态为 S 的情况下是否可能可行,初始全部状态为记录为不可行状态 ,只记 dp[0]=True 为可行状态。空间复杂度:O(2^n),其中 n 为数组 nums 的长度,主要为状态数组的空间开销。个状态,每一个状态进行了 n 次尝试。

2022-09-20 23:01:48 1545

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除