自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tomjobs的博客

I was so much older then, I'm younger than that now.

  • 博客(1811)
  • 收藏
  • 关注

原创 About Me

Hello World

2020-08-07 00:08:05 1077 2

原创 基于RAFT的分布式存储etcd原理解读

工作后一直在思考怎么实现一个永不崩溃的服务,各大厂商也会强调自己的服务达到了多少的可用性,然而在2023 年底互联网出现了许多P0级的服务中断事件,其中滴滴打车的故障更是造成了几十小时级的不可用。在事件的了解中得知故障原因大概率是由于 Kubernetes的升级。根据滴滴技术公众号升级方案,有这样一句话:集群体量大,最大集群规模已经远远超出了社区推荐的 5 千个node上限,有问题的爆炸半径大。

2024-06-18 22:09:20 977

原创 selenium请求chrome如何添加header头

selenium的webdriver本身没有api能做这个事情,详见issue。国内的博客全抄来抄去,说selenium直接加add_argument参数就好了,弄得找了好几天找代码问题,上外网查秒解决。所以要学好计算机还是得英文呐~~

2022-12-11 19:00:29 5353 8

原创 PhxRPC源码简析

PhxRPC是微信后台团队推出的一个非常简洁小巧的RPC框架,可以看作是微信内部svrkit框架的简化版。在此基础上又实现了PhxSQL和PhxQueue等开源框架。通过学习PhxRPC可以学习到微信内部优秀的框架实现经验(快速拒绝、C++协程、HSHA、Back Request等)。学习这个项目的初衷是因为内部的svrkit代码太多,想先从简单的下手。不过这个项目貌似也很久没维护过了,网上也查不到什么资料,这里是自己学习过程的一些记录。

2022-10-31 01:17:52 1876 5

原创 四种一致性的区分

一致性

2022-06-03 16:42:07 584 1

原创 一个acmer的校招经历

关于博主弱校acmer,有过5个月的字节实习经历,拿到了微信、百度、字节、拼多多、迅雷、知乎、富途、虾皮…的offer关于春招春招比较浪了,寒假的时候一个大佬在群里说字节有个部门实习只面算法,然后确实除了算法什么都没答上来,比较印象深刻的是,我问三面面试官职业发展要学什么,他说先证明自己有学好一个东西的能力;面过后就躺平了关于实习首先感谢mentor和ld,团队氛围也非常不错。实习最大的感受是将各种类型的知识给串起来了,实际项目中,数据量会很大,服务也会很多,不可避免的要

2021-12-16 21:57:10 1616 2

原创 LeetCode 142. 环形链表 II(快慢指针)

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?思路:追及相遇问题,像个物理题。首先利用快慢指针,只要两个指针最终相遇了,就能判断出现了环。假设环大小为bbb,环外部分大小为aaa

2021-10-26 11:29:46 249

原创 LeetCode 952. 按公因数计算最大组件大小(并查集)

给定一个由不同正整数的组成的非空数组 A,考虑下面的图:有 A.length 个节点,按从 A[0] 到 A[A.length - 1] 标记;只有当 A[i] 和 A[j] 共用一个大于 1 的公因数时,A[i] 和 A[j] 之间才有一条边。返回图中最大连通组件的大小。思路:将每个数质因数分解,得到的素因子个数很少。然后按照素因子为单位进行并查集连接(一个数包含的所有素因子全部并在一起),最后按照数字个数统计并查集大小。class Solution {public: Solutio

2021-10-23 15:23:51 274

原创 LeetCode 297. 二叉树的序列化与反序列化

序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方

2021-10-23 12:57:31 169

原创 LeetCode 48. 旋转图像

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。思路:又是一道利用原地空间的题。每次遇到一个位置就交换到旋转后的位置,然后用临时变量存下被交换位置的值,每个点交换4次,交换1/4个矩阵就可以了。class Solution {public: void rotate(vector<vector<int>>& matri

2021-10-23 10:53:38 157

原创 LeetCode 30. 串联所有单词的子串(哈希+双指针)

给定一个字符串 s 和一些 长度相同 的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 words 中单词串联的顺序。示例 1:输入:s = “barfoothefoobarman”, words = [“foo”,“bar”]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 “barfoo” 和 “foobar” 。输出的顺序不重要, [9,0] 也是有效答案

2021-10-23 00:39:46 231

原创 LeetCode 189. 旋转数组( 三种O(1)解法 )

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入

2021-10-22 20:23:17 247

原创 LeetCode 41. 缺失的第一个正数(复位,利用空间)

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 1:输入:nums = [1,2,0]输出:3示例 2:输入:nums = [3,4,-1,1]输出:2示例 3:输入:nums = [7,8,9,11,12]输出:1提示:1 <= nums.length <= 5 * 105-231 <= nums[i] <= 231 - 1思路:很经典的题,充分利用数

2021-10-22 17:14:24 145

原创 LeetCode 76. 最小覆盖子串(双指针)

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。示例 1:输入:s = “ADOBECODEBANC”, t = “ABC”输出:“BANC”示例 2:输入:s = “a”, t = “a”输出:“a”示例 3:输入: s = “a”, t = “

2021-10-13 21:21:33 228

原创 LeetCode 662. 二叉树最大宽度(层序遍历,防溢出)

题意:给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。思路:一开始用深度优先遍历计数来写的,但是这样会溢出。通过层序遍历,每次优先遍历完这一层,并且计数值减去起点计数值,就不会溢出了。class Solution {public: int widthOfBinaryTree

2021-10-12 20:38:12 245

原创 LeetCode 312. 戳气球(区间DP)

有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。求所能获得硬币的最大数量。示例 1:输入:nums = [3,1,5,8]输出:167解释:nums

2021-10-11 22:41:35 282

原创 LeetCode 301. 删除无效的括号(DFS剪枝)

给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。示例 1:输入:s = “()())()”输出:["(())()","()()()"]示例 2:输入:s = “(a)())()”输出:["(a())()","(a)()()"]示例 3:输入:s = “)(”输出:[""]提示:1 <= s.length <= 25s 由小写英文字母以及括号 ‘(’ 和 ‘)’ 组成s 中至多含

2021-10-11 18:49:34 243

原创 LeetCode 208. 实现 Trie (前缀树)

Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。boolean startsWith(S

2021-10-11 16:12:59 149

原创 Codeforces F. Imbalance Value of a Tree(并查集加排序,树)

题意:求出树中所有路径最大值减去最小值之和思路:美团笔试遇到了这题,这里再学习一下。首先考虑简单版本,求出所有路径最大值之和。可以先将所有点按照值排序,然后依次取,每次只考虑所有取出的点,当前的点就是所有点中的最大值点。通过并查集统计点的数目再计数。最小值和也是一样的,将值取负就可以了。具体统计的细节可以看代码,挺好懂的,一个计数问题。#include <cstdio>#include <cstring>#include <algorithm>#incl

2021-10-11 12:22:06 245

原创 LeetCode 84. 柱状图中最大的矩形(单调栈)

思路:单调栈可以用来求左边(右边)第一个大于(小于)自己的数,因为在栈中的元素一定是保证单调的。本题转换一下,实际就是求每个数左边第一个小于自己的位置和右边第一个小于自己的位置,单调栈维护一下就好了。class Solution {public: int largestRectangleArea(vector<int>& heights) { heights.push_back(-1); int n = heights.size(); .

2021-10-11 11:02:39 198

原创 LeetCode 352. 将数据流变为多个不相交区间(区间)

给你一个由非负整数 a1, a2, …, an 组成的数据流输入,请你将到目前为止看到的数字总结为不相交的区间列表。实现 SummaryRanges 类:SummaryRanges() 使用一个空数据流初始化对象。void addNum(int val) 向数据流中加入整数 val 。int[][] getIntervals() 以不相交区间 [starti, endi] 的列表形式返回对数据流中整数的总结。示例:输入:[“SummaryRanges”, “addNum”, “getInter

2021-10-10 00:18:27 233

原创 LeetCode 60. 排列序列(第k个排列)

给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。示例 1:输入:n = 3, k = 3输出:“213”示例 2:输入:n = 4, k = 9输出:“2314”示例 3:输入:n = 3, k = 1输出:“123”提示:1 <= n <= 91 <= k &l

2021-09-16 13:02:01 171

原创 LeetCode 1745. 回文串分割 IV(分为三个回文串,manacher)

给你一个字符串 s ,如果可以将它分割成三个 非空 回文子字符串,那么返回 true ,否则返回 false 。当一个字符串正着读和反着读是一模一样的,就称其为 回文字符串 。示例 1:输入:s = “abcbdd”输出:true解释:“abcbdd” = “a” + “bcb” + “dd”,三个子字符串都是回文的。示例 2:输入:s = “bcbddxy”输出:false解释:s 没办法被分割成 3 个回文子字符串。提示:3 <= s.length <= 2000s​

2021-09-15 21:37:47 406

原创 LeetCode 647. 回文子串(DP或马拉车)

给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:s = “abc”输出:3解释:三个回文子串: “a”, “b”, “c”示例 2:输入:s = “aaa”输出:6解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”提示:1 <= s.l

2021-09-15 19:17:50 196

原创 LeetCode 448. 找到所有数组中消失的数字(原地交换)

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。示例 1:输入:nums = [4,3,2,7,8,2,3,1]输出:[5,6]示例 2:输入:nums = [1,1]输出:[2]提示:n == nums.length1 <= n <= 1051 <= nums[i] <= n进阶:你能在不使用额外空间且时间复杂度为 O(n)

2021-09-14 17:06:28 187

原创 LeetCode 442. 数组中重复的数据(原地改变)

给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?示例:输入:[4,3,2,7,8,2,3,1]输出:[2,3]思路:条件非常苛刻,要保证O(n)和无额外空间,因此只能想到利用数组本身的空间。注意到1≤a[i]≤n1≤a[i]≤n1≤a[i]≤n,这就是个突破口首先默认下标为0,所以将所有数字减一。将每个数字对应自己位置上数加上nnn,数

2021-09-14 16:45:06 186

原创 LeetCode 300. 最长递增子序列(LIS)

思路:经典的DP问题最简单的dpdpdp定义是dp[i]dp[i]dp[i]代表以nums[i]nums[i]nums[i]结尾的数的最长递增子序列,那么转移就是dp[i]=max(dp[j]+1),j<idp[i]=max(dp[j]+1), j<idp[i]=max(dp[j]+1),j<i,复杂度O(n2)O(n^2)O(n2)不过还是可以优化,定义dp[i]dp[i]dp[i]代表长度为iii的递增子序列结尾数的最小值,如果是INF则代表不存在长度为iii的递增子序列。转.

2021-09-05 15:49:44 150

原创 LeetCode 470. 用 Rand7() 实现 Rand10()(拒绝采样)

思路:貌似腾讯面试很喜欢这道题拒绝采样法就是随机两次,当成一个7进制数,那么生成的范围就是1~49。结果大于40就舍弃重来,如下图。(转自leetcode官方题解)class Solution {public: int rand10() { while(1) { int x1 = rand7(), x2 = rand7(); int idx = x1 + (x2 - 1) * 7; if(id.

2021-09-04 16:17:25 184

原创 LeetCode11. 盛最多水的容器

思路:一开始想到了单调栈,但正解是贪心+双指针:枚举横轴长度,双指针每次淘汰掉左右较小的值当横轴长度为nnn的时候,纵轴高度为min(a[0],a[n−1])min(a[0],a[n-1])min(a[0],a[n−1])当横轴长度为n−1n-1n−1的时候,淘汰掉左右两边的较小一个,因此纵轴高度为max(min(a[0],a[n−2]),min(a[1],a[n−1]))max(min(a[0],a[n-2]),min(a[1],a[n-1]))max(min(a[0],a[n−2]),min(a.

2021-08-21 19:42:57 208

原创 LeetCode 2. 两数相加(链表)

题意:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。思路:链表模拟题 */class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* head = l1;

2021-08-21 15:37:57 94

原创 LeetCode 148. 排序链表(归并)

题意:给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。思路:很巧妙的一道题,想到归并就好做了。class Solution {public: ListNode* mergeList(ListNode* l1, ListNode* l2) { ListNode* head = new ListNode(0); ListNode* node = head; while(l1 && l2) {

2021-08-21 01:50:36 140

原创 LeetCode 382. 链表随机节点(蓄水池算法)

思路:啥是蓄水池算法:参考链接:https://www.jianshu.com/p/7a9ea6ece2af给定一个数据流,数据流长度N很大,且N直到处理完所有数据之前都不可知,请问如何在只遍历一遍数据(O(N))的情况下,能够随机选取出m个不重复的数据。相当于是一串水流,水池只能装下m滴水,那么装满了以后只能随机去掉一滴再放进新的一滴。解法:对于前mmm个数,直接放进水池之后的数,假设为第kkk个,那么有mk\frac{m}{k}km​的概率保留,同时水池中的每个数有mk∗1m=1k.

2021-08-20 22:50:13 231

原创 计算机学习笔记

前言I’m so much older then, I’ younger than that now.—Bob DylanC++基础语法const分为修饰变量、指针、引用,简单记忆为const后面修饰的值不可改变//修饰变量const int A; //常量,代表A不能被修改const int* A; //指向常量指针,代表*A不能被修改,但是指针指向可以修改const int& A; //代表被引用的数不可以被修改int* const A; //指向变量的常指针cons

2021-08-18 20:23:57 831 1

原创 go语言中间件学习demo

Ginpackage mainimport "github.com/gin-gonic/gin"func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context){ c.JSON(200, gin.H{ "message": "pong", }) }) router(r) r.Run()}func router(router *gin.Engine)

2021-06-17 11:19:33 303

原创 后端学习小记

前言现在是计算机科学的黄金时代,也是全人类的黄金时代,能够站在这样的黄金时代里,我感到无比的荣幸,我梦想能够成为黄金时代大潮中的一朵浪花,为人类智慧添砖加瓦。GoTour of go,有代码,有简介,1天就能撸一遍,有时再看还能学到新东西Go语言圣经,深入学习要的吧,正在阅读ing,之后想写写这本书的笔记,代码:https://github.com/basicExploration/Demos/blob/master/gop_homework7天用Go从零实现系列,简易版分布式缓存、RPC、HT

2021-06-11 18:51:53 325

原创 python对于csv,json格式的处理

csvcsv全称:Comma-Separated Values,也称为逗号分隔符文件。读入:import csvwith open(filepath, mode='r') as csv_file: rows = csv.DictReader(csv_file) for row in rows: # 这里写操作;读取出来的是很多个字典,每个row为一个字典,key值对应csv文件第一行 value1 = row['column1']

2021-04-21 21:39:45 229

原创 关于为什么要开始

2021-04-07 23:16:29 414 2

原创 Bounty Hunter II Gym - 100753B(DAG最小路径覆盖,二分图最大匹配)

题意:DAG图求最少多少条不想交路径覆盖全图思路:真没想到是二分图;建图以后就构成了二分图,一开始n个点对应n个路径,每进行一次匹配路径数减少一,所以结果就是n减去求最大匹配数。#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<iostream>#include<queue>#include<map>.

2021-03-21 18:44:04 256

原创 LeetCode 115. 不同的子序列(DP)

思路:定义dp[i][j]dp[i][j]dp[i][j]代表字符串sss前iii个字符中,存在多少个字符串ttt前jjj个字符的子序列。class Solution {public: int numDistinct(string s, string t) { int n = s.size(),m = t.size(); vector<vector<long long>>dp(n + 1,vector(m + 1,0ll)); .

2021-03-17 15:01:38 150

原创 LeetCode 315. 计算右侧小于当前元素的个数(树状数组)

思路:树状数组裸题class Solution {public: const static int maxn = 3e4 + 7; int c[maxn]; void add(int x,int v) { while(x < maxn) { c[x] += v; x += x & -x; } } int query(int x) { int res =.

2021-03-17 14:34:15 192

空空如也

空空如也

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

TA关注的人

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