自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入算法: leetcode862: 如何使用双端队列从O(n^2)优化到O(n)?

由前缀和的性质可以知道, 如果该区间的和至少为k, 假设我们已经找到了前缀和pre[i] - pre[j] >= k, 那么此时i-j就是我们的最小区间, 因为如果存在i’ > i, 使得pre[i’] - pre[j]也成立, 那么有i’-j>i-j, 所以i’-j不是我们要找的最小区间。回到题目上, 我们要用双端队列对循环进行优化, 我们需要进行。输入:nums = [2,-1,2], k = 3。输入:nums = [1,2], k = 4。输入:nums = [1], k = 1。

2022-10-26 16:02:18 338 1

原创 1624. 两个相同字符之间的最长子字符串

给你一个字符串 s,请你返回 两个相同字符之间的最长子字符串的长度 ,计算长度时不含这两个字符。如果不存在这样的子字符串,返回 -1。解释:最优的子字符串是 “abba” ,其他的非最优解包括 “bb” 和 “”。解释:s 中不存在出现出现两次的字符,所以返回 -1。解释:最优的子字符串是两个 ‘a’ 之间的空子字符串。子字符串 是字符串中的一个连续字符序列。解释:最优的子字符串是 “bc”。输入:s = “cabbac”输入:s = “cbzxy”输入:s = “abca”输入:s = “aa”

2022-09-17 09:44:12 119

原创 算法学习笔记: Python实现BF字符串匹配算法

算法

2022-09-08 22:39:43 319

原创 深入算法:从0开始证明欧几里得算法

算法

2022-09-05 10:30:14 153

原创 信息论学习笔记(二):离散无噪声系统

通信原理

2022-09-02 18:01:21 708 1

原创 信息论学习笔记(一):认识通信系统

信息论

2022-09-01 23:57:09 363

原创 深入底层:c语言文件操作中read函数的原理

c语言

2022-08-25 23:48:30 2047

原创 算法导论学习笔记(一): 插入排序

伪代码insertion-sort(A) for j = 2 to length[A] do key = A[j] # insert A[j] into the sorted sequence A [1 .. j -1] i = j - 1 while i > 0 and A[i] > key do A[i + 1] = A[i] i = i + 1 A[i + 1] = key证明插入算法的正确性要证明插入算法的正确性,首先要证明循环不变式:也就

2021-02-28 17:30:34 172

原创 MIT计算机科学中的数学学习笔记(一): state machine

Proofdefine: m|a => exist a Integer number k, make m equals to k * aInvariant: P(n) = “if (x, y) is the state after n transitions, then m|x, m|y”problemwe have two jugs, the one only can fill with 3 gals water, another one can only fill with 5 gals

2021-02-18 10:12:11 240

原创 跟着陶哲轩一起学数学(四): 幂集公理与习题3.4.6的证明

幂集公理设X, Y都是一个集合,存在一个集合记录为Y^X,且该集合是从X到Y的全体函数构成的。于是:f 属于 Y^X <=> f 是一个定义域为 X 且值域为 Y 的函数逆象如果 U 是 Y 的一个子集,定义集合f ^ -1(U)为f^-1(U) := { x 属于 X : f(x) 属于 U}3.4.6证明过程3.4.6: 设X是一个集合, 证明 {Y : Y 是 X 的一个子集} 是一个集合假设 Y = { 0, 1 }, 于是得到映射关系f: X -> { 0,

2021-02-14 18:58:50 654

原创 跟着陶哲轩学数学(三): 函数与集合的关系

函数与集合的关系函数的定义居然能与集合扯上关系!设函数的定义域为集合X值域为Y那么函数f : X -> Y 实际上是一个集合到另一个集合的映射

2021-02-14 18:20:17 2206

原创 跟着陶哲轩学数学 目录

期末考差了, 理科拖了后腿,于是就下定决心跟着陶哲轩学数学,以下是我记录的笔记(每日一更):集合跟着陶哲轩一起学数学(一): 习题3.1.6: 证明德摩根定律跟着陶哲轩一起学数学(二): 罗素悖论...

2021-02-11 09:49:03 230

原创 跟着陶哲轩一起学数学(二): 罗素悖论

罗素悖论的产生分类公理:y 属于 {x : P(x) 为 真} <=> P(y)为真看上去好像没什么毛病, 但是它导致了一个逻辑上的一个矛盾:当P(x) 表示下述命题时:P(x) <=> "x 是一个集合, 并且 x 不属于 x"简单来说, 当x是一个不包含自身的集合,使得P(x)为真于是我们可以构造这样一个集合U:U := { x : P(x) 为真 } = { x : x 是一个集合, 且 x 不属于 x } 我们对U进行讨论: 它是否包含自身?看

2021-02-11 09:43:00 595

原创 跟着陶哲轩一起学数学(一): 习题3.1.6: 证明德摩根定律

证明德摩根定律X / (A U B) = (X \ A) 交 (X \ B)和X \ (A 交 B) = (X \ A) U (X \ B)不妨先设几个数据一下看看定律是否正确:A = {1, 2, 3, 4}B = {2, 4, 6}X = {1, 2, 3, 4, 5, 6}易得A U B 为 {1, 2, 3, 4, 6}X \ (A U B) 为 {5}X \ A 为 {5, 6}X \ B 为 {1, 5}因此 (X \ A) U (X \ B) 为 {5}所以

2021-02-09 22:07:59 3659

原创 我的HTTP学习笔记

1.3 网络基础TCP/IPTCP/IP协议族按层次分别分为以下4层:应用层、传输层、网络层和数据链路层1.4 与HTTP关系密切的协议:IP、TCP和DNS几乎所有使用网络的系统都会用到IP协议。可能有人会把“IP”和“IP地址”搞混,“IP”其实是一种协议的名称。采用ARP协议(Address Resolution Protocol)。ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。所谓的字节流服务(Byte Stream Service)是指,为了方便传输

2020-09-26 13:39:29 111

原创 Python截取最长连续字符串

def get_skip_frame(self, skip, frame_list): tmp_list = [] return_list = [] for i in range(len(frame_list)): if len(tmp_list) == 0: tmp_list.append(frame_list[i]) else: change .

2020-09-04 23:54:11 564

原创 leetcode:钥匙和房间(dfs和bfs)

有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,…,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。最初,除 0 号房间外的其余所有房间都被锁住。你可以自由地在房间之间来回走动。如果能进入每个房间返回 true,否则返

2020-08-31 13:22:33 145

原创 leetcode两个数组的交集

给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]代码class Solution(object): def intersection(self, nums1, nums2): """ :type nums1: List[int] :type n

2020-08-29 22:44:49 92

原创 leetcode:贪心算法:你可以获得的最大硬币数目

有 3n 堆数目不一的硬币,你和你的朋友们打算按以下方式分硬币:每一轮中,你将会选出 任意 3 堆硬币(不一定连续)。Alice 将会取走硬币数量最多的那一堆。你将会取走硬币数量第二多的那一堆。Bob 将会取走最后一堆。重复这个过程,直到没有更多硬币。给你一个整数数组 piles ,其中 piles[i] 是第 i 堆中硬币的数目。返回你可以获得的最大硬币数目。示例 1:输入:piles = [2,4,1,2,7,8]输出:9解释:选出 (2, 7, 8) ,Alice 取走 8 枚

2020-08-28 10:34:24 527

原创 __builtin_popcount函数

返回参数二进制中1的个数

2020-08-27 18:28:11 443

原创 位运算

大写变小写、小写变大写:字符 ^= 32;大写变小写、小写变小写:字符 |= 32;大写变大写、小写变大写:字符 &= 33;

2020-08-27 18:09:37 116

原创 数据结构学习笔记: 模式BF匹配算法

模式BF匹配算法模式BF匹配算法是字符串的匹配算法,它的算法思想是枚举法。算法步骤(1)从S第1个字符开始,与T第1个字符比较,如果相等,继续比较下一个字符,否则转向下一步;(2)从S第2个字符开始,与T第1个字符比较,如果相等,继续比较下一个字符,否则转向下一步;(3)从S第3个字符开始,与T第1个字符比较,如果相等,继续比较下一个字符,否则转向下一步。。。。。。(4)如果T比较完毕,则返回T在S中第一个字符出现的位置;(5)如果S比较完毕,则返回0,说明T在S中未出现。...

2020-08-25 12:58:49 154

原创 leetcode: 两数相加(链表)

题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807代码# Definition for singly-link

2020-08-24 22:58:29 69

原创 leetcode贪心算法: 1403:非递增顺序的最小子序列

题目给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。如果存在多个解决方案,只需返回 长度最小 的子序列。如果仍然有多个解决方案,则返回 元素之和最大 的子序列。与子数组不同的地方在于,「数组的子序列」不强调元素在原数组中的连续性,也就是说,它可以通过从数组中分离一些(也可能不分离)元素得到。注意,题目数据保证满足所有约束条件的解决方案是 唯一 的。同时,返回的答案应当按 非递增顺序 排列。示例 1:输入:nums = [4,3,1

2020-08-24 14:34:14 102

原创 算法学习笔记: 贪心算法

贪心算法的基本思路(1)建立数学模型来描述问题;(2)把求解的问题分成若干个子问题;(3)对每一子问题求解,得到子问题的局部最优解;(4)把子问题的局部最优解合并成原来解问题的一个解。实现过程(1)从问题的某一初始解出发;(2)while能向给定总目标前进一步;(3)求出可行解的一个解元素;(4)由所有解元素组合成问题的一个可行解。装箱问题假设有编号分别为0,1,…,n-1的n种物品,体积分别为V0,V1,…,Vn-1。将这n种物品装到容量都为V的若干箱子里。约定这n种物品的体积均不超

2020-08-24 13:48:38 159

原创 leetcode专题之队列:设计循环双端队列

class MyCircularDeque(object): def __init__(self, k): # 长度为k时占用k+1的空间,多出来的空间用来区分isEmpty和isFull # 首尾两个指针相等的时候为empty,尾部+1等于首部的时候为Full self.q = [0] * (k + 1) self.len = k + 1 self.rear = 0 self.front = 0

2020-08-23 23:13:59 95

原创 leetcode专题之队列: 滑动窗口的最大值

给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3

2020-08-23 22:45:06 82

原创 leetcode专题之队列:933最近的请求次数

写一个 RecentCounter 类来计算最近的请求。它只有一个方法:ping(int t),其中 t 代表以毫秒为单位的某个时间。返回从 3000 毫秒前到现在的 ping 数。任何处于 [t - 3000, t] 时间范围之内的 ping 都将会被计算在内,包括当前(指 t 时刻)的 ping。保证每次对 ping 的调用都使用比之前更大的 t 值。示例:输入:inputs = ["RecentCounter","ping","ping","ping","ping"], inputs =

2020-08-23 22:16:05 60

原创 算法学习笔记: 递推

两种递推算法顺推法:从已知条件出发,逐步推算出要解决问题的方法。例如斐波那契数列就可以通过顺推法不断递推算出新的数据。逆推法:从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。顺推法经典的兔子问题可以用顺推法解决:#include <stdio.h>#define NUM 13int main(){ int i; //保存兔子的初始数据和每月的总数 long fib[NUM] = {1,1}; //顺推每个月的总数 for(i=2;i&lt

2020-08-23 16:49:39 136

原创 leetcode连续数列

给定一个整数数组,找出总和最大的连续数列,并返回总和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解题class Solution {public: int maxSubArray(vector<int>& nums) { int n=nums.size(); vector<int>dp(n+1,0); int res=

2020-08-21 22:23:51 141

原创 leetcode 除数博弈

爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < N 且 N % x == 0 。用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 False。假设两个玩家都以最佳状态参与游戏。示例 1:输入:2输出:true解释:爱丽丝选择 1,鲍勃无法进行操作。示例 2:输入:3输出:f

2020-08-21 22:02:30 93

原创 leetcode 连续的子数组和

给定一个包含 非负数 的数组和一个目标 整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,且总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。示例 1:输入:[23,2,4,6,7], k = 6输出:True解释:[2,4] 是一个大小为 2 的子数组,并且和为 6。示例 2:输入:[23,2,6,4,7], k = 6输出:True解释:[23,2,6,4,7]是大小为 5 的子数组,并且和为 42。说明:数组的长度不会超过 10,000 。

2020-08-21 17:34:39 122

原创 leetcode 矩阵置0

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入: [ [1,1,1], [1,0,1], [1,1,1]]输出: [ [1,0,1], [0,0,0], [1,0,1]]示例 2:输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5]]输出: [ [0,0,0,0], [0,4,5,0], [0,3,1,0]]进阶:一个直接的解决方案

2020-08-21 15:08:04 90

原创 leetcode 拿硬币

桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。示例 1:输入:[4,2,1]输出:4解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。示例 2:输入:[2,3,10]输出:8限制:1 <= n <= 41 <= coins[i] <= 10解题思路这题搞的是你的数学思维,次数的规律是(x+1)//2,

2020-08-21 14:07:38 127

原创 leetcode:分式化简

有一个同学在学习分式。他需要将一个连分数化成最简分数,你能帮助他吗?连分数是形如上图的分式。在本题中,所有系数都是大于等于0的整数。输入的cont代表连分数的系数(cont[0]代表上图的a0,以此类推)。返回一个长度为2的数组[n, m],使得连分数的值等于n / m,且n, m最大公约数为1。示例 1:输入:cont = [3, 2, 0, 2]输出:[13, 4]解释:原连分数等价于3 + (1 / (2 + (1 / (0 + 1 / 2))))。注意[26, 8], [-13, -4

2020-08-21 13:52:03 301

原创 leetcode 平衡二叉树

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \ 4 4返回 fal

2020-08-18 22:16:07 147

原创 leetcod104:二叉树的最大深度

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。使用bfs:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode

2020-08-18 21:53:56 96

原创 leetcode 303

连接:https://leetcode-cn.com/problems/range-sum-query-immutable/comments/class NumArray: def __init__(self, nums: List[int]): if not nums: return self.dp = [0] * len(nums) self.dp[0] = nums[0] # 求和 #

2020-08-17 23:00:26 83

原创 记录一次SQL注入

寻找注入点-u : 指定目标URL,sql注入点python sqlmap.py -u http://43.247.91.228:81/login.php输出: ___ __H__ ___ ___[.]_____ ___ ___ {1.4.7.2#dev}|_ -| . ["] | .'| . ||___|_ ["]_|_|_|__,| _| |_|V... |_| http://sqlmap.org[!] legal

2020-07-08 22:49:14 407

原创 Nmap学习笔记(一):探测主机信息

端口扫描扫描指定IP开发的端口nmap -sS -p 1-65535 -v 192.168.1.106运行结果:Starting Nmap 7.70 ( https://nmap.org ) at 2020-07-04 15:44 ?D1ú±ê×?ê±??Initiating Ping Scan at 15:44Scanning 192.168.1.106 [4 ports]Completed Ping Scan at 15:44, 11.52s elapsed (1 total hosts

2020-07-04 15:48:30 924

空空如也

空空如也

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

TA关注的人

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