自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Go学习第十八章——Gin日志与第三方工具Logrus

Go web框架——Gin日志与第三方工具Logrus

2023-10-29 11:43:58 1775 1

原创 Go学习第十七章——Gin中间件与路由

Go web框架——Gin中间件与路由

2023-10-29 11:42:33 1092

原创 Go学习第十六章——Gin文件上传与下载

Go web框架——Gin文件上传与下载

2023-10-29 11:41:29 2326

原创 Go学习第十五章——Gin参数绑定bind与验证器

当验证不通过时,会给出错误的信息,但是原始的错误信息不太友好,不利于用户查看只需要给结构体加一个msg 的tagUsername string `json:"username" binding:"required" msg:"用户名不能为空"`Password string `json:"password" binding:"min=3,max=6" msg:"密码长度不能小于3大于6"`

2023-10-28 17:54:59 2337 1

原创 Go学习第十四章——Gin请求与响应

Go web框架——Gin请求与响应

2023-10-28 17:50:46 1163

原创 Go学习第十三章——Gin入门与路由

github链接:https://github.com/gin-gonic/gin中文文档:https://gin-gonic.com/zh-cn/docs/学习链接(博主在bilibili有视频):http://www.fengfengzhidao.com/Gin是一个轻量级的、高性能的web框架,由Golang语言开发。Gin的核心设计理念是提供快速建立API的开发方式,同时保持良好的性能和高度易用性。

2023-10-28 17:47:49 1159

原创 Go学习第十二章——Go反射与TCP编程

Go学习第十二章——Go反射与TCP编程,快速入门,案例讲解,迅速了解~~~

2023-10-27 17:46:51 489

原创 Go学习第十一章——协程goroutine与管道channel

Go学习第十一章——协程goroutine与管道channel

2023-10-26 23:33:55 614

原创 Go学习第十章——文件操作,Json和测试

文件在程序中是以流的形式来操作的。**流:**数据在数据源(文件)和程序(内存)之间经历的路径。**输入流(读文件):**数据从数据源(文件)到程序(内存)的路径。**输出流(写文件):**数据从程序(内存)到数据源(文件)的路径。在Golang里,os.File封装所以文件相关操作,File是一个结构体。测试用例文件名必须以 test.go 结尾。比如 cal test.go ,cal 不是固定的。

2023-10-26 17:40:24 836

原创 Go学习第九章——面向“对象”编程(三大特性与接口和断言)

徐徐渐进,详细讲解,面向“对象”编程(三大特性与接口和断言)

2023-10-26 00:23:45 359 1

原创 Go学习第八章——面向“对象”编程(入门——结构体与方法)

Golang面向对象基础——结构体与方法入门

2023-10-25 18:02:23 392

原创 Go学习第七章——数组arr,切片slice和映射map

当负载因子超过一定阈值时,map 会重新分配更大的内存空间,将已有的元素重新哈希到新的内存位置上,并拷贝到新的底层数组中。由于哈希表是按照 key 所计算的哈希值来访问元素的,因此访问元素的速度是非常快的,不会因为 key 的顺序而降低速度。此外,由于底层数组存储的是键值对,而不是一个个具体的元素,所以在空间占用上,与 key 的顺序无关,可以充分利用底层数组的空间。map 的底层实现是哈希表,哈希表对 key 进行哈希运算,将 key 映射到底层数组的某个位置上,并存储对应的 value。

2023-10-24 21:53:28 303

原创 Go学习第六章——系统函数与错误处理

Go也支持自定义错误,使用errors.New 和 panic 内置函数实现。errors.New(“错误说明”),会返回一个error类型的值,表示一个错误panic内置函数,接受一个interface{}类型的值(也就是任何值了)作为参数。可以接受error类型的遍历,输出错误信息,并退出程序。如果,也就是正确的,就没有问题~// 函数去读取以配置文件init.conf的信息// 如果文件名传入不正确,我们就返回一个自定义的错误//读取...return nil} else {

2023-10-23 22:48:14 265

原创 Go学习第五章——函数与包

该函数会在main函数执行前,被Go运行框架调用,也就是说init会在main函数前被调用。

2023-10-23 18:26:19 199

原创 Go学习第四章——程序流程控制

随后,对布尔表达式进行判定,若判定结果为true,则执行循环体,否则,终止循环;这三种基本逻辑结构是相互支撑的,它们共同构成了算法的基本结构,无论怎样复杂的逻辑结构,都可以通过它们来表达。Golang提供for-range的方式,可以方便遍历字符串、数组、切片、字典等(注:数组的遍历,我们放到讲数组的时候再讲解),案例说明如何遍历字符串。是 Go 语言中的一个关键字,用于结束当前函数或方法的执行,并返回结果(可选)。同时,和其他语言不同的是,在 Go 语言中,“顺序结构”代表“先执行a,再执行b”的逻辑。

2023-10-22 23:00:45 617

原创 Go学习第三章——运算符与进制

只要第一个数值/表达式的结果是true,后面的表达式等就不用运算,直接就是true -->提高运算效率。:只要第一个数值/表达式的结果是false,那么后面的表达式等就不用运算了,直接结果就是false。Go语言有几十种运算符,被分成十几个级别,有的运算符优先级不同,有的运算符优先级相同,请看下表。逻辑运算符:&&(逻辑与/短路与),||(逻辑或/短路或),!要求:可以从控制台接收用户信息,【姓名,年龄,薪水,是否通过考试】略~~~~这里就不写了,网上大把!略~~~~这里也不写了,网上大把!

2023-10-22 18:24:20 513

原创 Go学习第二章——变量与数据类型

Go学习第二章——Go变量与数据类型(包含指针)

2023-10-19 23:03:54 796

原创 Go学习第一章——开发环境安装以及快速入门(GoLand)

如何快速入门golang,从无到有,一篇文章解决,开发工具使用GoLand,紧跟时代,冲冲冲!!!

2023-10-19 22:59:22 1846

原创 算法通关村第十九关——动态规划高频问题(白银)

代码随想录确定dp数组(dp table)及其下标的含义确定递推公式初始化dp数组确定遍历顺序举例推导dp数组。

2023-09-10 16:44:47 363 3

原创 算法通关村第十九关——动态规划是怎么回事(青铜)

动态规划是一种解决复杂问题的算法思想,它将一个大问题分解为多个相互关联的子问题,并通过递推关系将子问题的解整合起来,最终得到原问题的解。动态规划的核心思想是将问题划分为重叠子问题,并存储子问题的解,避免重复计算。动态规划通常用于求解最优化问题,如求解最长公共子序列、最短路径、背包问题等。它的基本步骤包括定义状态、设置初始状态、确定状态转移方程和计算最优解。动态规划的优点是减少了重复计算,提高了算法效率,但它也需要额外的空间来存储子问题的解,因此在使用动态规划时需要权衡时间和空间的开销。

2023-09-07 13:19:42 529 1

原创 算法通关村第十八关——回溯热门问题(白银)

对于英文字母,它们的 ASCII 码中的第 6 位表示大小写信息,其中大写字母的第 6 位为 0,小写字母的第 6 位为 1。同时,由于异或运算是可逆的,所以在递归回溯时,再次对同一个字符进行异或操作,可以恢复原来的大小写形式。我们发现大写字符与其对应的小写字符的 ASCII 的差为 32,32 这个值如果敏感的话,它是 2^5,在编程语言中,可以表示为 1 << 5。则,可以使用boolean[]可以记录,用数组的方式,记录true,false(说实话,我也是第一次用。异或运算(^)是一种位运算符。

2023-09-05 14:17:07 137

原创 算法通关村第十八关——回溯是怎么回事(青铜)

回溯算法是一种解决问题的常见方法,特别适用于在给定约束条件下搜索所有可能的解空间。它通过不断地尝试和撤销选择来寻找问题的解,因此也被称为"试错法"。本文将详细介绍回溯算法,并通过图解和具体例子讲解其原理和应用。回溯可以视为递归的拓展,很多思想和解法都与递归密切相关,在很多材料中都将回溯都与递归同时解释,例如本章2.1的路径问题就可以使用递归和回溯两种方法来解决。因此学习回溯时,我们对比递归来分析其特征会理解更深刻。

2023-09-04 17:08:29 147

原创 算法通关村第十七关——贪心高频问题(白银)

i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。此时前面出现过所有字母,最远也就到这个边界了。区间和1 + 区间和2 < 0 同时 区间和2>0,只能说明区间和1 < 0, 那么就会从假设的箭头初就开始从新选择其实位置了。所以一样的套路,先排序,让所有的相邻区间尽可能的重叠在一起,按左边界,或者右边界排序都可以,处理逻辑稍有不同。

2023-09-01 17:40:33 95

原创 算法通关村第十七关——贪心其实很简单(青铜)

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。那贪心是否一定能得到最优解呢?《算法导论》给出了最明确的答案——贪心算法不能保证一定能得到最优解,但是对很多问题确实可以得到最优解。既然不能保证 ,我怎么知道某个解法是不是最优解呢?很遗憾,笔者查阅大量材料,也没有谁给出定论,大部分的解释其实就是——看上去是就是了。那我怎么知道什么时候该用贪心呢?这要求要解决的问题具有”最优子结构“,那什么是”最优子结构“呢?这个问题好比用高等数学证明”1+1=2“,解释不如不解释。

2023-09-01 14:50:40 78

原创 算法通关村第十六关——滑动窗口经典问题(白银)

本题因为字符串s1的异位词长度一定是和s2字符串的长度一样的,所以很自然的想到可以以s1.length()为大小截图一个固定窗口,然后窗口一边向右移动,一边比较就行了。本题看似复杂,但其实简单的很。不过这样写之后有多余的计算,在while循环里面,一个个移动,那么怎样一次性直接将left移动到位置,也就是重复值的位置,的下一个位置。我们用了key,value的数据结构,所以可以存key的时候,设置value为当前的位置,这样移动就可以直接找到位置。没看清题目,原来是找至多包含。,是不同字符,不是数量,靠!

2023-08-31 16:43:12 91

原创 算法通关村第十六关——滑动窗口其实很简单(青铜)

总结起来,滑动窗口是一种通过移动窗口的边界来寻找满足条件的子串或子数组的算法技巧。它能够在O(n)的时间复杂度内解决一些字符串或数组相关的问题,具有较高的效率和性能。

2023-08-31 12:47:56 95

原创 算法通关村第十五关——用4kb内存寻找重复元素(青铜)

分析:本身是一道海量数据问题的热身题,如果去掉“只有4KB”的要求,我们可以先创建一个大小为N的数组,然后将这些数据放进来,但是这里数组最大为32KB,而题目有4KB的内存限制,我们就必须先确定该如何存放这个数组。例如一个40亿的整数数组,如果用整数存储需要16GB左右的空间,而如果使用位存储,就可以用2GB的空间,这样很多问题就能够解决了。题目要求:给定一个数组,包含从1到N的整数,N最大为32000,数组可能还有重复值,且N的取值不定,若只有4KB的内存可用,该如何打印数组中所有重复元素。

2023-08-30 18:03:08 108

原创 算法通关村第十五关——海量数据场景下的热门算法题(白银)

解决办法是把包含 20 亿个数的大文件用哈希函数分成 16 个小文件,根据哈希函数的性质,同一种数不可能被散列到不同的小文件上,同时每个小文件中不同的数一定不会大于 2 亿种, 假设哈希函数足够优秀。假设用哈希表来保存出现过的数,如果 40 亿个数都不同,则哈希表的记录数为 40 亿条,存一个 32 位整数需要 4B,所以最差情况下需要 40 亿*4B=160 亿字节,大约需要16GB 的空间,这是不符合要求的。就是遍历这 40 亿个无符号数,遇到所有的数时,就把 bitArr 相应位置的值设置为 1。

2023-08-30 18:01:38 101

原创 算法通关村第十四关——堆高效解决的经典问题(白银)

Java PriorityQueue 实现了 Queue 接口,不允许放入 null 元素;其通过堆实现,具体说是通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue 的底层实现,数组初始大小为11;也可以用一棵完全二叉树表示。

2023-08-30 15:26:04 103 1

原创 算法通关村第十四关——堆结构(青铜)

"向上调整"方法比较新元素与其父节点的大小,如果新元素大于父节点,则交换它们的位置,并继续向上比较,直到满足大顶堆的条件。即每次调整都是从父节点、左孩子节点、右孩子节点三者中选择最大者跟父节点进行交换(交换之后可能造成被交换的孩子节点不满足堆的性质,因此每次交换之后要重新对被交换的孩子节点进行调整)。所以说,优先队列和堆不是一个同level的概念 ,但是java的PriorityQueue就是堆实现的,因此在java领域可以认为堆就是优先级队列,优先级队列就是堆,换做其他场景则不行。

2023-08-28 16:45:53 71

原创 算法通关村第十三关——数字与数学高频问题(白银)

然后还有一些特殊情况就是当出现 999999、999999999 之类的数字时,循环到最后也需要进位,出现这种情况时需要手动将它进一位。所以只需要判断有没有进位并模拟出它的进位方式,如十位数加 111 个位数置为 000,如此循环直到判断没有再进位就退出循环返回结果。通过不断除以2,直到n变成1或者不再能被2整除,然后检查最终的n是否等于1。这道题主要的难点是9+1的进位,其他地方跟上面那个方式有点点像。这题跟上一题一样,也就一个9+1,一个是1+1。上面是求2的幂,那么可以求m的幂。

2023-08-25 15:44:16 84

原创 算法通关村第十三关——数字与数学基础问题(青铜)

第二个想法是将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。例如,输入 1221,我们可以将数字 “1221” 的后半部分从 “21” 反转为 “12”,并将其与前半部分 “12” 进行比较,因为二者相同,我们得知数字 1221 是回文。以12345为例,先拿到5,再拿到4,之后是3,2,1,我们按这样的顺序就可以反向拼接处一个数字了,也就能达到 反转 的效果。由于每一个零都是由2和5相乘得到的,所以要计算末尾的零的个数,只需要计算n!中有多少个因子5即可。

2023-08-25 15:43:33 91

原创 算法通关村第十二关——字符串冲刺题(黄金)

从根节点开始,循环执行以下操作:统计子节点数量count和最后一个非空子节点的索引index。否则,将当前节点的索引对应的字符追加到prefix中,并将当前节点指向最后一个非空子节点。在插入操作insert中,通过遍历单词的每一个字符,将字符映射到对应的索引,并判断该索引对应的子节点是否为空。如果为空,则创建一个新的子节点。最后,在单词的最后一个字符的位置上,将isEnd置为true,表示该节点是一个单词的结尾。这段代码的时间复杂度为O(nm),其中n是strs数组的长度,m是所有字符串的平均长度。

2023-08-23 15:27:27 67

原创 算法通关村第十二关——字符串经典基础面试题(白银)

想一下,我们将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。否则,即 i + k >= n,说明当前子字符串的长度超过等于 k,应该只取到 n - 1 作为结束位置,以保证不越界。如果 i + k 的值小于 n,则说明当前子字符串的长度不足 k,可以直接取 i + k 作为结束位置。这题不难,也就是先把string的大写变成小写,保留数字,其他的去掉,然后再进行判断。如果两个字符串是字母异位词,那么它们排序后的结果应该是相同的。

2023-08-23 13:51:36 59

原创 算法通关村第十二关——字符串:隐形的王者(青铜)

字符串遍历与操作:包括对字符串的遍历、字符替换、字符删除、字符插入等基本操作。字符串匹配与查找:包括子串匹配、正则表达式匹配、模式匹配等相关算法。字符串排序与比较:包括字符串的字典排序、按特定规则排序、字符串比较等相关算法。字符串翻转与反转:包括字符串的翻转、单词反转等相关算法。字符串拆分与连接:包括字符串的拆分、连接、格式化等相关算法。字符串判定与验证:包括字符串的长度判断、是否包含特定字符、是否为回文串等相关算法。字符串压缩与解压:包括字符串的压缩、解压缩等相关算法。

2023-08-23 13:50:37 68

原创 算法通关村第十一关——位运算的高频算法题(白银)

首先,求得A和B的最小值和最大值,对其中的最小值当做乘数(为什么选最小值,因为选最小值当乘数,可以算的少),将其拆分成2的幂的和,即min = a_0 * 2^0 + a_1 * 2^1 + …它的基本思想是将原问题拆解成若干个子问题,先求解子问题的最优解,然后根据子问题的最优解推导出原问题的最优解。首先我们可以根据题目要求直接计算,题目给定的 n 是 32 位二进制表示下的一个整数,计算位 1 的个数的最简单的方法是遍历 n 的二进制表示的每一位,判断每一位是否为 1,同时进行计数。

2023-08-21 14:28:38 91

原创 算法通关村第十一关——理解位运算的规则(青铜)

对于 0 和正数,上述说法是成立的,整数除法是向 0 取整,右移运算是向下取整,也是向 0 取整。例如,(−50)>>2 的结果是 −13,而 (−50)/4 的结果是 −12,两者是不相等的。异或运算的符号是 ⊕(在代码中用∧ 表示异或),运算规则是:对于每个二进制位,当两个数对应的位相同时,结果为 0,否则结果为 1。注意,我们得到了一个9位的结果,超出了原来的8位范围,这是溢出的结果。与运算的符号是 &,运算规则是:对于每个二进制位,当两个数对应的位都为 1 时,结果才为 1,否则结果为 0。

2023-08-21 14:27:41 78

原创 算法通关村第10关——归并排序(黄金)

比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8],这个操作与合并两个有序数组的完全一样,不同的是这里是将数组的两个部分合并。具体做法是通过计算起始位置和结束位置的中间值,将数组分为两部分,左半部分的起始位置为start,结束位置为middle,右半部分的起始位置为middle+1,结束位置为end。最后,将临时数组中的元素复制回原数组中,从起始位置到结束位置,完成排序。最终,得到了一个有序的数组。

2023-08-18 14:09:12 51

原创 算法通关村第10关——数组中第k大的数字(白银)

因为在上一次循环结束后,right指针指向的是小于等于基准值的最右边元素,所以需要对左半部分进行递归排序,即。而left指针指向的是大于等于基准值的最左边元素,所以需要对右半部分进行递归排序,即。这道题的题目就多了个k,其实就是快速排序后取倒是第k个。

2023-08-18 11:59:23 69 1

原创 算法通关村第10关——快速排序并不难(青铜)

什么是快速排序?快速排序是一种常用的排序算法,也是基于比较的排序算法。它通过分治的思想将一个大问题转化为多个小问题来解决。实现快速排序的核心思想是选取一个基准元素(通常选取第一个元素),将数组分成两部分,一部分是小于基准元素的,另一部分是大于基准元素的。然后对这两部分分别进行递归快速排序,最终得到有序的结果。选取基准元素。将数组中小于基准元素的元素移到基准元素左边,大于基准元素的元素移到基准元素右边。对基准元素左边和右边的子数组分别进行递归快速排序。快速排序适合解决需要排序的问题。

2023-08-18 11:58:25 96 1

空空如也

空空如也

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

TA关注的人

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