自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

畅春园

韬光养晦,有所作为。

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

原创 防范SYN洪泛攻击的方法 -- SYN cookie

在tcp的三次握手中,如果客户端不发送ACK来完成三次握手的第三步,那么通常一分多钟之后,服务器将中止半开连接并回收资源。如果攻击者发送大量的TCPSYN报文段,而不完成第三次握手的步骤,那么服务器会不断为这些半开连接分配资源,导致服务器的连接资源被消耗殆尽。..................

2022-07-17 20:26:22 1692 1

原创 InnoDB中MVCC的实现原理

目的在尽可能避免加锁操作的情况下,实现可重复读。实现原理在每行记录后面保存两个隐藏的列,这两个列中用两个版本号来表征下面两个时间:1. 行的创建时间。2. 行的过期时间(或者删除时间)。这里的“时间”指的是系统版本号。每开始一个新的事务,系统版本号就会自动递增。操作过程select根据以下两个条件检查每行记录:1. 行的创建时间要早于当前事务版本。2. 行的删除时间要么没有定义,要么晚于当前事务版本。只有同时满足以上两个条件,才会返回查询结果。insert

2022-05-29 19:05:54 365

原创 Leetcode.0526 | 优美的排列

题目假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组 perm(下标从 1 开始),只要满足下述条件之一 ,该数组就是一个 优美的排列 :1、perm[i] 能够被 i 整除2、i 能够被 perm[i] 整除给你一个整数 n ,返回可以构造的“优美的排列”的 数量 。示例输入:n = 2输出:2解释:第 1 个优美的排列是 [1,2]: - perm[1] = 1 能被 i = 1 整除 - perm[2] = 2 能被 i = 2 整除第 2 个...

2022-03-14 23:53:06 1290

原创 查找文件夹内文件中,含有特定词语的页

为了减轻工作负担开发的一个小程序

2022-03-05 22:40:50 554

原创 Python中requirements.txt文件

用于表示项目的依赖包以及依赖包的版本。我们使用如下命令来重新构建项目所需要的运行环境依赖:pip install -r requirements.txt效果如下所示:对于一个已经构建成功的项目,可以使用如下命令生成requirements.txt文件:pip freeze > requirements.txt...

2022-02-10 21:58:42 377

原创 RESTful API 简介(学习笔记)

RESTful接口的命名规范与语义格式RESTful是一种网络应用程序的设计风格和开发方式,可以使用xml方式来定义或者json格式来定义。RESTful适用于移动互联网厂商作为业务接口的场景,实现调用移动网络资源的功能。动作类型:新增、修改、删除所调用的资源。RESTful的三个要点:1. 基于http协议URL对外暴露;URL被视为资源,中括号的内容为可选项。2. 使用XML或者JSON格式定义数据,不可以包含任何与展现有关的内容。比如,下图中返回了浏览器才能解析的内

2022-02-09 16:10:02 1432 1

原创 在控制面板找不到程序的情况下,卸载流氓软件

1. 使用快捷键:Ctrl+Shift+Esc , 打开任务管理器。可以找到程序所对应的进程:2. 右键点击该进程,选择 “打开文件所在的位置”,显示文件:3. 打开这个文件夹的上一级目录:4. 找到uninst,执行该程序:...

2022-02-06 21:49:44 6825

原创 Chrome浏览器解决主页被劫持的问题

问题已经设置好启动时的页面,如下所示:但是打开浏览器时,这个设置仍然无效:解决方法在浏览器图标上单击鼠标右键,在菜单中选择“属性”,如下所示:在“目标”一栏当中,可以发现浏览器的目标已经被劫持:将这个地址删掉,换成你想要的地址:切到“常规”标签,将“只读”前面的对勾去掉:点击确定,重启浏览器:如果你不写目标地址,打开浏览器以后的默认如下:...

2022-02-03 18:19:19 3752

原创 Leetcode.0143 | 重排链表

题目给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为:L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例输入:head = [1,2,3,4]输出:[1,4,2,3]解决方法1. 使用快慢指针的方式,寻找链表的中间节点。2.从中间节点的下一个节点为开头,将链表断成两半。

2022-01-22 17:29:41 63

原创 Leetcode.0378 | 有序矩阵中第k小的元素

题目给你一个n x n矩阵matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。示例输入:matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8输出:13解释:矩阵中的元素为 [1,5,9,10,11,12,13,13,15],第 8 小元素是 13输入:matrix = [[-5]], k = 1输出:-5解决方法使用二分法,...

2022-01-19 23:28:05 451

原创 工作中使用的小众git命令整理(不定时更新)

边工作边整理

2022-01-19 21:50:54 433

原创 将docker镜像外部的文件转到镜像内部

1. 运行docker镜像,镜像变为容器docker run <镜像名>2. 容器运行结束,可以使用docker ps -a 查看容器名和id。3. 将指定的文件拷贝到容器里面docker cp <容器外文件的路径> <要拷贝到容器内的路径>4. 将容器生成镜像docker commit <容器id或容器名> <镜像名> ...

2022-01-19 21:29:43 2204

原创 查看docker镜像中的文件

1. 进入镜像内部docker run -it --entrypoint sh <镜像名称>2.执行上面命令后,会进入镜像内部。然后使用ls -al会将镜像中的文件列出来

2022-01-14 14:07:27 9359

原创 Leetcode.0287 | 寻找重复数

题目给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。示例输入:nums = [1,3,4,2,2]输出:2输入:nums = [3,1,3,4,2]输出:3输入:nums = [1,1]输出:1输入:nums = [1,1,2]

2022-01-08 20:29:52 56

原创 Leetcode.0437 | 路径总和

题目给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。示例输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8输出:3解释:和等于 8 的路径有 3 条,如图所示。使用双重递归解决问题双重递归的主要应用于需要对每个节点进行相.

2022-01-08 00:19:01 584

原创 Leetcode.0215 | 数组中的第K个最大元素

题目给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例输入: [3,2,1,5,6,4] 和 k = 2输出: 5输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4解决方法使用堆排序解决此问题。首先在原地建立一个,做 k - 1次删除操作后堆顶元素就是我们要找的答案。根据初始数组,手动构建大根堆。大根堆的本质是一棵完全二叉树,所有的父结点

2022-01-06 19:04:16 365

原创 Leetcode.0236 | 二叉树的最近公共祖先

题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。输入:root = [3,5,1,6,2,0,8,nul.

2022-01-06 13:35:29 531

原创 Leetcode.0207 | 课程表

题目你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对[0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。示例输入.

2022-01-05 15:37:08 1119

原创 Leetcode.0200 | 岛屿数量

题目给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1输入:grid = [ ["...

2022-01-04 23:39:52 61

原创 Leetcode.0148 | 排序链表

题目给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。要求时间复杂度为示例输入:head = [4,2,1,3]输出:[1,2,3,4]输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]解决方法使用归并排序。步骤如下:1.找到链表的中点,以中点为分界,将链表拆分成两个子链表。寻找链表的中点可以使用快慢指针的做法,快指针每次移动2步,慢指针每次移动1步,当快指针到达链表末尾时,慢指针指向的链表节点即为链.

2022-01-03 13:29:28 635

原创 Leetcode.0394 | 字符串解码

题目给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例输入:s = "3[a]2[bc]"输出:"aaabcbc"输入

2022-01-02 17:35:41 84

原创 Leetcode.0399 | 除法求值

题目给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。另有一些以数组 queries 表示的问题,其中 queries[j] = [Cj, Dj] 表示第 j 个问题,请你根据已知条件找出 Cj / Dj = ? 的结果作为答案。返回 所有问题的答案 。如果存在某个无法确定的答案

2021-12-26 13:53:11 457

原创 Leetcode.0406 | 根据身高重建队列

题目假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。示例输入:people = [[7,0],[4,.

2021-12-18 23:59:27 77

原创 Leetcode.0416 | 分割等和子集

输入:nums = [1,2,3,5]输出:false解释:数组不能分割成两个元素和相等的子集。解决方法本题的解法类似于...

2021-12-13 23:55:06 667

原创 Leetcode.0438 | 找到字符串中所有字母异位词

题目给定两个字符串s和 p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词:指由相同字母重排列形成的字符串(包括相同的字符串)。示例输入: s = "cbaebabacd", p = "abc"输出: [0,6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。输入: s = "abab", p = "ab"输出: [0,1,...

2021-12-12 21:04:27 561

原创 Leetcode.0494 | 目标和

题目给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加'+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 。例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和为 .

2021-12-12 01:02:14 192

原创 Leetcode.0538 | 把二叉树转化为累加树

题目给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node的新值等于原树中大于或等于node.val的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。示例输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]输出:[30,36,21,36,...

2021-12-07 22:39:39 60

原创 Leetcode.0543 | 二叉树的直径

题目给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 1 / \ 2 3 / \ 4 5 返回3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。解决方法递归遍历二叉树的每一个节点,对于每一颗子树,其最大路径要么位于左子树,要么位于右子树,要么穿过根节点。当最大路径穿过根..

2021-12-06 22:28:42 51

原创 Leetcode.0560 | 和为K的子数组

题目给你一个整数数组nums和一个整数k,请你统计并返回该数组中和为k的连续子数组的个数。示例输入:nums = [1,1,1], k = 2输出:2输入:nums = [1,2,3], k = 3输出:2解决方法对数组nums进行遍历,建立数组preSum,preSum[i]表示数组nums中从0到i的和。在遍历的过程中,使用哈希表记录各个preSum[i]及其出现的次数。对于当前计算到的preSum[i],若preSum[i]的值为k,则结果加一。然后...

2021-12-05 19:07:36 392

原创 Leetcode.0581 | 最短无序连续子数组

题目给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。示例输入:nums = [2,6,4,8,10,9,15]输出:5解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。输入:nums = [1,2,3,4]输出:0输入:nums = [1]输出:0解决方法...

2021-12-05 12:54:52 98

原创 Leetcode.0617 | 合并二叉树

题目给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点示例输入: Tree 1 Tree 2 1 2 ...

2021-12-01 22:55:10 61

原创 Leetcode.0621 | 任务调度器

题目给你一个用字符数组tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。然而,两个相同种类的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的最短时间 。示例输入:tasks = ["A","A","A","B","B",.

2021-11-29 23:13:07 84

原创 Leetcode.0647 | 回文子串

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

2021-11-23 22:18:12 211

原创 Leetcode.0146 | LRU缓存机制

题目运用你所掌握的数据结构,设计和实现一个LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value)如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之...

2021-11-22 23:04:26 61

原创 Leetcode.0139 | 单词拆分

题目给你一个字符串 s 和一个字符串列表 wordDict 作为字典,判定s 是否可以由空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。示例输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。输入: s = "applepenapple", wordDict = ["apple", "pen"]输出.

2021-11-21 11:35:32 415

原创 Leetcode.0128 | 最长连续序列

题目给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n) 的算法解决此问题。示例

2021-11-21 01:04:06 94

原创 Leetcode.0098 | 验证二叉搜索树

题目给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例输入:root = [2,1,3]输出:true输入:root = [5,1,4,null,null,3,6]输出:false解释:根节点的值是 5 ,但是右子节点的值是 4 。解决方法在中序遍历的情况下,输出的二叉搜索树.

2021-11-20 11:51:38 395

原创 Leetcode.0096 | 不同的二叉搜索树

题目给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。示例输入:n = 3输出:5输入:n = 1输出:1解决方法动态规划。先寻找规律,当n为1的时候有1种二叉搜索树,当n为2的时候有两种二叉搜索树。当n为3时,头节点可能为1,可能为2,可能为3。头节点为1时,右子树有两个节点,而对于右子树来说,有两种二叉搜索树。此时,二叉搜索树的数量与n为2时的情况相同。 ...

2021-11-20 00:46:19 506

原创 Leetcode.0064 | 最小路径和

题目给定一个包含非负整数的mxn网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。输入:grid = [[1,2,3],[4,5,6]]输出:12解决方法使用动态规划方法。对于位置为(M,N)的网格,到达这个网格只能从(M-1,N)处或者(M,N-1)处出发...

2021-11-18 22:06:53 85

原创 Leetcode.0062 | 不同路径

题目一个机器人位于一个 m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例输入:m = 3, n = 7输出:28输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右3. 向下 -&.

2021-11-17 22:43:34 287

空空如也

空空如也

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

TA关注的人

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