自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

刘小雨的博客

道可道,非常道;名可名,非常名!

  • 博客(317)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 go底层TCP网络编程剖析

我们都知道以太网层和IP 层是不可靠的,想要可靠的传输就必须到传输层。而传输层的重要协议就是TCP 协议了如果我们想要在应用层上开发,也需要在基于TCP 层上开发,所以我们需要了解Go官方是如何去实现传输层的TCP 经典的三次握手和四次挥手过程,我们这节主要讲解go 的相关知识,这里的细节就不一一展开了我们可以想象如果手动实现TCP 的三次握手和四次挥手会怎么样? 答案是很麻烦的, 于是在计算机中就有了socket 这个概念, 它能将三次握手和四次挥手简化几个函数connect(), close(), 屏蔽

2022-06-29 16:48:19 3704 9

原创 go 底层原理及基本概念

1. go底层运行过程不会有人还以为程序运行的入门是main 函数吧。其实很多语言在main函数之前就已经做过很多事情了,下面咋们就分析分析go中的入门到执行的整个过程吧~~~1.1 真正的入口实际上是runtime/rt0_xxx.s 这个文件中, 有关runtime的叙述在上一节已经加以说明...

2022-05-25 11:29:22 2374 4

原创 go 语言hello world 的编译过程

文章目录1. 比较各种语言1.1 c/c++1.2 java1.3 js1.4 go2. go 中的runtime2.1 位置2.2 区别2.3 runtime 特点2.4 runtime 能力2.4 runtime other能力3. hello world 编译过程3.1 编译code步骤分析3.2 编译code过程原理3.3 词法分析3.4 句法分析3.5 语义分析3.6 中间码(SSA)3.7 机器码生成3.8 链接3.9 编译过程总结1. 比较各种语言1.1 c/c++c语言不是面向对象

2022-05-24 22:06:52 795

原创 几大排序算法+ kmp 的理解和代码实现

文章目录几种常见的排序(比较)冒泡排序 (百度百科)Code:选择排序 (百度百科)Code插入排序(百度百科)希尔排序(百度百科)Code快速排序(百度百科)Code归并排序(百度百科)Code堆排序(百度百科)Code:kmp算法在面试中的应用暴力做法Code优化做法 : KMP 算法Code几种常见的排序(比较)冒泡排序 (百度百科)这里就按照下面的两步模拟冒泡排序: 后面的类似,就不展示。Code:#include <iostream>using namespace s

2020-11-22 13:19:06 745 2

原创 【剑指offer】全书题解---你想要的都在这里,均在牛客AC

现在是2020年4月1日记录这一刻自己算法这关是需要经历的,而《剑指offer》第2版一书,能有效的提高算法能力和面试技巧。所以在这里记录下刷题的历程,把之前的数据结构和算法也大致做一个总结,也能希望自己坚持写完。此片blog用来记录每题的索引,当中也有自己的笔记,本人也是一名算法小白,如题目中有所纰漏,请朋友们留言指正。这里面的题目虽然全部是剑指offer上的,但是我是在牛客网上在线刷的......

2020-11-16 16:45:16 455

原创 掌握基础,需时刻重复记忆---呕心沥血整理出来的笔记

记录一下我的基础知识点,以后可以时不时的拿出来过一遍,瞧一瞧。C++的基础知识:几种排序是必须掌握的。插入排序直接插入O(n2)稳定shellO(n1.5)不稳定选择排序直接选择O(n2)不稳定堆排序O(nlogn)不稳定交换排序冒泡排序O(n2)稳定快速排序O(nlogn)不稳定—归并.........

2020-04-18 23:30:19 345

原创 word 常见的操作

修改指定页作为第一页的操作:链接

2023-03-03 21:26:10 203 1

原创 git 忽略文件.gitignore 不生效

因为.gitignore文件只是忽略那些原来没有被track 文件,如果项目中的文件已经被纳入版本管理了(就是git add ), 则修改.gitignore 文件是没有效果的。在个人项目中,当遇到想要不惜那个推送到仓库时,一般都会添加.gitignore 文件,但最近发现,有时添加后没有生效。方案:直接删除本地缓存(将文件改为未track状态),然后在提交,查看是否被忽略。

2023-02-28 20:09:12 241

原创 leetcode 67. 二进制求和(模拟加法)

​​作者简介:C/C++ 、Golang 领域耕耘者,创作者。

2022-10-24 20:31:31 442

原创 leetcode 67. 二进制求和(模拟加法)

​​作者简介:C/C++ 、Golang 领域耕耘者,创作者。

2022-10-24 10:35:27 245

原创 与c站的五周年

但也有很多内容是值得我学习的。搜索引擎打开了很多资料,其中就有一些博主在c站写的东西,我当时发现c站上有好多大神,写的东西既有逻辑性,又通俗易懂,比一些大学老师讲的要好。现在就是有时间有内容都会将自己的学的内容,心得等等记录在平台,也方便自己后面的总结。断断续续的在上面发布东西吧,其中也不乏有人说这个平台内容不行,鱼龙混杂等等。祝c站越来越好,加油!

2022-08-24 09:41:19 182 1

原创 算法刷题小结---几数之和

今天我们有由最基础的算法题入手------两数之和。随后引入三数之和、四数之和,来分析出题人是怎么的一步一步深入的,以及我们后面对问题扩展如何思考。两数之和可以直接用哈希表来解决。三数之和、四数之和,求解办法就是用双指针前后遍历来降低一个变量,进而减少一重循环。如果此篇博客对你有帮助的话,可以动一动你的小手~~~✏️ 评论,你的意见是我进步的财富!...

2022-08-23 11:20:39 434 1

原创 leetcode 66. 加一(简单模拟题)

​​给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例1:示例2:示例 3:此题方法是用模拟法过程是模拟人工加法的过程。从低位到高位,依次计算出每一位数字,过程中需要记录进位。如果最高位进位是1,则需要将整个数组后移一位,并在第0个位置写上1。执行结果:最多遍历n位, 时间复杂度为O(n)

2022-08-21 14:25:56 346 2

原创 leetcode 64. 最小路径和

​​给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例1:示例2:此题方法是用dp 表示从起点走到的路径和的最小值最后面有两个状态能走到, 分别是从上面走到、从左边走到从上面走到: 从左边走到: 下面给出分析图:执行结果:其中每个格子遍历一次, 时间复杂度为O(n2)

2022-08-21 13:56:42 313

原创 leetcode 60. 排列序列(困难、计数法)

​​给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。示例1:示例2:示例 3:此题方法之一是用库函数说明: 是求当前排列的下一个排列。方法二:计数法算法分析:原理:因为集合n个数的排列有n!个不同排列, 确定一个数后,后面应该有(n - 1)! 个不同排列,根据此性质,可定位到第几位数字是几。举例:当

2022-08-21 07:00:00 1255

原创 leetcode 63. 不同路径 II(dp)

​​一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例1:示例2:此题和上一题方法一样,唯一不同就是增加一个障碍物。所以只需在递归时候判断一下是否满足条件,如没有障碍物,则加上此条路径;反之,跳过。执行结果:时间复杂度为O(m * n)

2022-08-20 13:19:05 1147

原创 leetcode 62. 不同路径(简单dp)

​​一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例1:示例2:示例 3:此题方法是用dp我们画一个图,模拟一下不同路径由于是一个简单的dp,这里直接给出递归公式由于有特殊情况, 当时, ; 当 时,当然了 当 时, 上述做法需要一个大小为m x n的二维数组,空间复杂度为O(mn),但其实只会用到和,不会用到之前的数据,因此可

2022-08-20 13:09:39 599

原创 leetcode 61. 旋转链表

​​给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。示例1:示例2:提示:链表中节点的数目在范围 [0, 500] 内-100

2022-08-20 11:26:36 434

原创 leetcode 59. 螺旋矩阵 II

​​给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例1:示例2:此题方法是模拟填数就行。可以看下之前的leetcode54 螺旋矩阵我们顺时针定义四个方向:上右下左。从左上角(0, 0)开始遍历,先往右走,走到不能走为止,然后更改到下个方向,再走到不能走为止,依次类推,遍历 n2 个格子后停止。执行结果:矩阵中每个格子遍历一遍,时间复杂度为O(n2)

2022-08-20 06:30:00 332

原创 leetcode 58. 最后一个单词的长度(双指针、简单)

​​给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串示例1:示例2:示例 3:此题方法是用双指针两种方法:算法步骤:算法步骤:算法二执行结果:其中遍历一次, 时间复杂度为O(n)

2022-08-19 10:45:38 429

原创 leetcode 57. 插入区间

​​给你一个 无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例1:示例2:示例 3:示例 4:示例 5:此题方法是模拟题插入区间的题意理解如图示:我们只需要模拟一下即可。算法步骤:执行结果:其中遍历一次, 时间复杂度为O(n)............

2022-08-19 10:04:49 1833

原创 leetcode 56. 合并区间

​​以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。示例1:示例2:此题方法是用贪心算法步骤:执行结果:排序了一次,后面是线性扫描, 所以时间复杂度为O(nlogn)...

2022-08-19 06:00:00 307

原创 leetcode 54. 螺旋矩阵

​​给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例1:示例2:此题方法是用模拟题、语法题首先 需要确定4个方向,如图:按照题目意思, 需一直 →、↓、←、↑; →、↓、←、↑; 这个顺序来模拟遍历算法步骤:执行结果:其中遍历一次, 时间复杂度为O(n * m)...

2022-08-18 11:22:49 345 1

原创 leetcode 55. 跳跃游戏

​​给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例1:示例2:此题方法是用贪心类似 leetcode 45 题核心:尽可能跳到更远的位置算法步骤:执行结果:其中遍历一次, 时间复杂度为O(n)......

2022-08-18 11:02:47 856

原创 leetcode 53. 最大子数组和(简单dp)

​​给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例1:示例2:示例 3:此题方法是用dp算法步骤:优化:其实可以将上面额外开辟的数组空间优化成一个常量记录下来,然后用常量迭代更新答案即可。见第二个代码。用额外数据空间记录,空间复杂度为 O(n)。用常量记录信息,空间复杂度为 O(1)。执行结果:其中遍历一次, 时间复杂度为O(n)。没有用额外的数组,空间复杂度为O(1)。......

2022-08-17 12:16:11 748 4

原创 leetcode 50. Pow(x, n) (快速幂)

​​实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。示例1:示例2:示例 3:提示:此题方法是用快速幂分析:注意:需要用类型的专门存的绝对值,因为范围是,若取到取绝对值后变成会爆范围核心:快速幂的核心思想:就是需要把n 拆分成二进制表示,然后就可以根据n 的二进制表示来加速计算如果n 的第k为1,则需要乘上x 的2k次方,计算x 的2k次方,自需每次将自身做平方即可。递归预处理二进制幂:示例:执行结果:只进行O(logn)次乘法运算,故时间复杂度为O(logn).

2022-08-17 10:49:27 659 2

原创 leetcode 47. 全排列 II(46题变形)

​​给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。示例1:示例2:可先看leetcode 46 全排列此题方法是用dfs + 回溯这题剪枝的前提需要先排序,排序后所有相等的数全部都靠在一起另外,在遇到重复元素时,有两种情况:这题对比46题,主要是要改一下在遇到相同数字时,需要怎么的操作,我们只需要保证遇到相同数时,不重复搜索就行。下面的代码主要是这一行起作用:执行结果:时间复杂度: O(n * n !)...

2022-08-16 15:12:10 385

原创 leetcode 46. 全排列(经典)

​​给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例1:示例2:示例 3:此题方法是用dfs该题就是一颗深度优先遍历的一颗树,我们的将它递归树枚举的状态画出来就是下面的样子那么我们应该想需要什么状态, 实际上这里就是函数的参数分析得: 需要知道填什么数字(vector 数组)、需要记录填到哪一位(int u 下标)、需要知道哪位数组已经填过了(标记数组bool st)算法步骤:下面实现跟上面差不多,数组形式改了执行结果:O(n * n !)搜

2022-08-16 11:34:40 403

原创 leetcode 45. 跳跃游戏 II(dp + 贪心)

​​给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。示例1:示例2:此题方法是用dp + 贪心执行结果:数组的每个元素最多被遍历两次,故时间复杂度为 O(n)。...

2022-08-16 10:51:04 337

原创 leetcode 44. 通配符匹配(困难,dp)

​​给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例1:示例2:示例 3:此题方法是用dp和leetcode 第10题 相似【注】: 第10题转移方程为: 本题转移方程为: 所以在代码实现的时候后面是没有&& 条件的执行结果:状态数为 O(nm),每次转移仅需常数时间,故总时间复杂度为 O

2022-08-15 11:51:47 252 7

原创 leetcode 10. 正则表达式匹配(dp)

​​给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例1:示例2:示例3:此题方法是用dp执行结果:状态数为 O(nm),每次转移仅需常数时间,故总时间复杂度为 O(nm)。...

2022-08-15 10:25:33 190

原创 leetcode 43. 字符串相乘(高精度相乘)

​​给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。示例1:示例2:模拟题直接模拟竖式计算, 乘积的最大长度为两个乘数的长度之和执行结果:设两个数字的位数分别是 n 和m,竖式乘法为两层循环错位相乘,故时间按复杂度是 O(nm)。...

2022-08-14 22:29:20 249 2

原创 leetcode 42. 接雨水(困难、单调栈的应用)

​​给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例1:示例2:方法一:用单调栈思想算法步骤:方法二: 动态规划空间换时间 用两个额外数组left和right分别存储柱子i左边最大值和右边最大值三次遍历求得总雨水面积计算公式 执行结果:时间复杂度为O(n), 空间复杂度为O(n)...

2022-08-14 15:26:32 668 3

原创 leetcode 49. 字母异位词分组

​​给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。示例1:示例2:示例 3:此题方法使用字符串哈希算法步骤:执行结果:时间复杂度:O(nklog k),其中 n 是 strs 中的字符串的数量,k 是 strs 中的字符串的的最大长度。需要遍历 n 个字符串,对于每个字符串,需要 O(klogk) 的时间进行排序以及 O(1)的时间更新哈希表,因此总时间复杂度是 O(nklogk)

2022-08-13 22:30:34 649 2

原创 leetcode 41. 缺失的第一个正数(困难,数组元素位置原地交换)

​​给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例1:示例2:示例 3:方法一:此题不考虑使用额外空间的话,可以直接用哈希表做法执行结果:哈希表使用,空间复杂度为O(n);时间复杂度:线性时间复杂度,O(n).........

2022-08-12 22:36:06 765 3

原创 leetcode 48. 旋转图像(对矩阵的对角、左右旋转)

​​给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例1:示例2:此题是找到规律后比较好做分析得出可以先对角线翻转,然后左右翻转即可得到满足题意的方案执行结果:时间复杂度:O(N2),其中 N 是 matrix 的边长。......

2022-08-11 21:42:48 746

原创 go语言中的锁底层分析(二)

先加mutex 写锁, 若已经被加写锁会阻塞等待将readerCount 变为负值,阻塞读锁的获取计算需要等待多少个读协程释放如果需要等待读协程释放,陷入writerSem (写协程队列等待)【注】:代码在RWMutex 中Lock函数将readerCount 变为正值, 允许读锁的获取释放在readerSem 中等待的读协程解锁mutex将给readerCount 无脑加1如果readerCount 是正数, 加锁成功。......

2022-08-11 20:45:00 867 9

原创 go语言中的锁底层分析(一)

go 中的锁的底层理解是比较复杂的,但在go很多数据结构中都使用到了锁。如果深入了解并知道go 底层的锁是如何实现,不同的锁有啥区别,对于后面在项目中也很有帮助。这一章节主要讲解一下四种锁sync.Mutex : 互斥锁sync.RWMutex : 读写锁sync.WaitGroup : 等待锁sync.Once : 初始化。......

2022-08-11 16:09:36 1836 8

原创 leetcode 9. 回文数

​​给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例1:示例2:示例 3:三种方法直接转化字符串进行比较用的库函数,在面试中可能不推荐,库函数的原理也是一个一个字符进行逆序转化逆序数字在进行比较(推荐)比较数字的一般字符上一种方法的优化,不过时间复杂度没有优化执行结果:其中数字遍历一次, 时间复杂度为O(n)...

2022-08-10 21:24:27 713 1

原创 leetcode 39. 组合总和(完全背包问题)

​​给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。示例1:示例2:示例 3:此题方法是用暴搜算法步骤:执行结果:暴搜,时间复杂度质数级别.

2022-08-09 16:22:05 774 1

04 配置环境.7z

安装zbar 的exe 和 64位 的动态库的文件,全部都在里面,外加一个测试zbar 的程序,运行环境qt5.9 + opencv4.5 。

2020-12-21

mysql工具包(下载即用)

mysql工具包,下载后直接使用,学习mysql时非常方便。

2018-08-19

达内C++面试300题

前几题描述: 1.面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2.什么是类? 答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。 3.对象都具有的两方面特征是什么?分别是什么含义? 答:对象都具有的特征是:静态特征和动态特征。 静态特征是指能描述对象的一些属性(成员变量),动态特征是指对象表现出来的行为(成员函数)

2018-04-28

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

TA关注的人

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