
Go
kkkkkkkkk777777777
这个作者很懒,什么都没留下…
展开
-
GO七天开发挑战:7天实现Web框架-Gee(day 4 分组控制Group)
这里的分组是指对可以进行相似处理的路由进行分组,是否分为一个组通常是以前缀进行区分,例如 /admin 为一个分组,那么 /admin/a 和 /admin/b 就是该分组下的子分组。如果没有分组控制,那么就需要对这两个不同的路由分别进行控制,会增加不必要的工作,也会增加路由控制的难度和复杂度。此外,分组支持嵌套,父分组的功能应该可以作用到子分组上,例如 /admin分组应该包含顶层分组 / 的相关处理。分组需要通过前缀来对分组进行区分,所以包含 string 类型的 prefix;原创 2022-09-30 14:58:12 · 795 阅读 · 1 评论 -
GO七天开发挑战:7天实现Web框架-Gee(day 3 前缀树路由Router)
其中,roots 是请求的路由对应的树根节点,用于判断路由是否匹配,起始的树节点为 GET/POST等请求类型节点(key eg, roots['GET'] roots['POST']);否则查找子树中所有可以匹配的节点,遍历这些节点,递归查找下一层是否匹配,直至找到完全匹配路由的叶子节点,并将该叶子节点返回。(2) 查找子树中所有可能的匹配:遍历当前节点对象的所有子节点,将所有可匹配的节点放入 slice 中,遍历所有节点后,返回 slice。根据请求的类型以及路由找到匹配的节点后,返回对应的响应内容。原创 2022-09-25 11:57:21 · 925 阅读 · 0 评论 -
LeetCode 打卡 Day 61 —— 283. 移动零
首先想到的是最直接基础的解题方法,遍历整个数组,将为0的元素从数组中删除,之后在数组末尾插入0原创 2022-08-06 12:11:11 · 203 阅读 · 0 评论 -
LeetCode 打卡 Day 60 —— 234. 回文链表
首先想到的是根据当前链表构建一个反向链表原创 2022-07-01 18:40:45 · 262 阅读 · 0 评论 -
LeetCode 打卡 Day 59 —— 226. 翻转二叉树
看到二叉树首先就想到了回溯,想要反转二叉树也较为简单,将每个树节点的左右子树进行交换即可原创 2022-07-01 16:44:36 · 263 阅读 · 0 评论 -
LeetCode 打卡 Day 58 —— 206. 反转链表
题目还是比较简单的,可以很快想到解法并实现,整体思路就是维持两个指针,反转之间的 “Next”关系原创 2022-07-01 15:09:41 · 201 阅读 · 0 评论 -
LeetCode 打卡 Day 57 —— 169. 多数元素
想到的解法较为简单,首先还是想到哈希表,以每个数值为key,value中记录该数值出现的次数原创 2022-06-30 11:27:21 · 222 阅读 · 0 评论 -
LeetCode 打卡 Day 56 —— 160. 相交链表 [Go]
题目较为简单,关键在于想到相交的节点对应的指针值一致,可以用“==”进行比较,所以直接对一个链表进行遍历,构建一个以指针值作为键的哈希表原创 2022-06-28 18:30:21 · 228 阅读 · 0 评论 -
LeetCode 打卡 Day 53 —— 单词拆分
1、题目2、题解看到题目就想到了动态规划,dp 内存储如下内容,dp[i] 表示从0到 i 能够原创 2022-04-27 18:45:28 · 263 阅读 · 0 评论 -
GO七天开发挑战:7天实现Web框架-Gee(day 2)
学习资料来自:GitHub - geektutu/7days-golang: 7 days golang programs from scratch (web framework Gee, distributed cache GeeCache, object relational mapping ORM framework GeeORM, rpc framework GeeRPC etc) 7天用Go动手写/从零实现系列Day2独立路由 & 设计上下文结构封装数据构建独立路由文件路径 .原创 2022-04-27 17:07:28 · 470 阅读 · 0 评论 -
LeetCode 打卡 Day 52 —— 环形链表
1、题目2、题解看到题目,脑海中瞬间就想到了哈希表,遍历链表,将经过的节点存放到哈希表中,每次遍历到节点就检测哈希表中是否已经存在,如果已存在证明链表中存在环,实现代码如下/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func hasCycle(head *ListNode) bool { n.原创 2022-04-26 13:58:24 · 614 阅读 · 0 评论 -
GO七天开发挑战:7天实现Web框架-Gee(day 1)
学习资料来自:https://github.com/geektutu/7days-golangDay1 准备知识 — http.Handler接口原创 2022-04-25 16:20:01 · 675 阅读 · 0 评论 -
LeetCode 打卡 Day 51 —— 最长连续序列
1、题目2、题解读完题目后的第一个想法就是对数组排序,排序后对数组进行一次遍历找到其中的连续序列即可,但已知的排序算法时间复杂度都不能保证O(n)算法 最好时间复杂度 最坏时间复杂度 平均时间复杂度 空间复杂度 快速排序 O(nlog2(n)) O(n2) O(nlog2(n)) O(log2n) 归并排序 O(nlog2(n)) O(nlog2(n)) O(nlog2(n) O(n) 堆排序原创 2022-04-25 13:16:05 · 618 阅读 · 0 评论 -
LeetCode 打卡 Day 50 —— 只出现一次的数字
1、题目2、题解题目中的数组具有特殊性:除某个数字外其余数字均出现两次。由于这个特殊性,想到可以首先对数组进行排序,排序后相邻2个数字相同,依次对排序后的数组进行一次遍历即可,实现代码如下。func singleNumber(nums []int) int { sort.Ints(nums) for i:=0; i<len(nums); i=i+2 { if i>=len(nums)-1{ return nums[len(n.原创 2022-04-24 20:42:04 · 361 阅读 · 0 评论 -
LeetCode 打卡 Day 49 —— 买卖股票的最佳时机
1、题目2、题解题目还是较为简单的,暴力方法很容易想到,使用一个二重遍历,固定数组中每一个数字然后向后进行遍历,保存差的最大值。但是总感觉有能够优于暴力解法的方法,即在遍历的过程中保存已遍历过的数字中的最小值,用当前值减去最小值即当前值能取得的最大利润。实现代码如下func maxProfit(prices []int) int { profit:=0 minP:=math.MaxInt32 getMin:=func(a, b int) int { ..原创 2022-04-22 13:31:13 · 466 阅读 · 0 评论 -
LeetCode 打卡 Day 48 —— 二叉树展开为链表
1、题目2、题解原创 2022-04-21 12:32:44 · 479 阅读 · 0 评论 -
LeetCode 打卡 Day 47 —— 从前序与中序遍历序列构造二叉树
1、题目2、题解解题的关键就在于同一棵树,不管是前序还是中序遍历它的长度都是相等的原创 2022-04-18 16:43:32 · 380 阅读 · 0 评论 -
LeetCode 打卡 Day 46 —— 二叉树的最大深度
1、题目2、题解首先的思路在于树的最大深度即整棵树的层数,这要是给的是数组,直接2^n=数组长度,解出 n 就好了,可惜了给的又是指针,那就再一次借助队列的结构对这棵树层序遍历好了,但注意:1)当且仅当该节点不为叶子节点时才将其加入队列,否则计算当前层数并更新最大长度。最后实现代码如下:/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *Tre原创 2022-04-17 20:09:52 · 297 阅读 · 0 评论 -
LeetCode 打卡 Day 45 —— 二叉树的层序遍历
1、题目2、题解这几天好多棵树啊,使用队列进行迭代,遍历树的每一层,今天做的还挺快的,哈哈这是功力见长了吗/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } **/func levelOrder(root *TreeNode) [][]int { s:=[][]int原创 2022-04-16 13:11:37 · 487 阅读 · 0 评论 -
LeetCode 打卡 Day 44 —— 对称二叉树
1、题目2、题解看到题目的第一瞬间,脑子里想,这要是给个数组多简单啊,可惜给的指针,leetcode真的永远都不让我如意,坏家伙(哼!)因为想到了数组,而对称的二叉树中序遍历的结果往往也是对称的,所以脑海中的第一个解法是对树进行中序遍历,将节点的值存到数组里,然后对数组进行检查,查看其中的值是否对称(下标之和相加等于数组长度的两个数相等即可)。按照这种思路解答的过程中发现如下注意点:1)当左右子树仅一方为空时,为空的那方需要一个标志来标识(因为节点范围 >= 1,所以选择 -1 作原创 2022-04-15 18:14:45 · 542 阅读 · 0 评论 -
Go知识点之随便记记(十)— 测试+性能调试
学习资料来自GitHub - unknwon/the-way-to-go_ZH_CN: 《The Way to Go》中文译本,中文正式名《Go 入门指南》启动外部命令和程序1、os 包 :StartProcess 函数(可调用或启动外部系统命令+二进制可执行文件)1)参数(1)参数1:要运行的进程(2)参数2:传递选项或参数(3)参数3:含有系统环境基本信息的结构体2)返回值:(1)启动成功:被启动进程的 id(2)启动失败:返回错误2、exec 包 :exec原创 2022-04-14 23:03:59 · 195 阅读 · 0 评论 -
Go知识点之随便记记(九)— 错误与异常
学习资料来自GitHub - unknwon/the-way-to-go_ZH_CN: 《The Way to Go》中文译本,中文正式名《Go 入门指南》错误处理1、错误处理机制1)普通错误:将错误对象作为函数或者方法的最后一个返回值,返回nil表示没有错误发生(不需要错误检测时 _ 代替,需要时使用 err),以下展示普通错误的一些构建方errors 包(注意:错误信息会以Error:开头,注重语法的话,错误信息记得小写开头)// errors包预先定义 error 接口ty.原创 2022-04-14 21:24:31 · 166 阅读 · 0 评论 -
LeetCode 打卡 Day 43 —— 验证二叉搜索树
1、题目2、题解吃一堑长一智,赶快去看树的数据结构有没有给,毕竟给数组还是给定义好的数据结构难度差别有点大,树的信息通过指定的数据结构进行存储,节点数范围 [1, 10^4]。已知的一些算法回溯,动态规划,滑动窗口,双指针,栈,想来想去还是先试试回溯吧,就是怕时间又超出限制,代码如下/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNod原创 2022-04-13 16:01:22 · 219 阅读 · 0 评论 -
LeetCode 打卡 Day 42 —— 不同的二叉搜索树
1、题目2、题解跟昨天一样又是树,还是一棵新树,来简单了解下二叉搜索树,它是满足如下条件的二叉树左子树所有节点小于根节点 右子树所有节点大于根节点 左右子树均为二叉搜索树脑海中首先的想法是从1到n遍历整数n,每个遍历到的数字均可能作为数的根节点,由此依次遍历,递归无疑是最适合的方法递归函数的参数:整数start,end,表示树的节点范围 递归出口:树仅有一个节点或没有节点start>=end 递归内容:确定当前树的节点,以及当前节点对应树的个数为 “左子树个数*右子树个.原创 2022-04-12 13:59:33 · 371 阅读 · 0 评论 -
Go知识点之随便记记(八)
学习资料来自GitHub - unknwon/the-way-to-go_ZH_CN: 《The Way to Go》中文译本,中文正式名《Go 入门指南》1、Gob数据: Go 自己的以二进制形式序列化和反序列化程序数据的格式,常用于远程方法(调用参数+结果的传输+应用程序和机器之间的数据传输)特定用于纯Go环境。编码:类似Json,io.Writer 接口,通过 NewEncoder() 函数创建 Encoder 调用 Encode()解码:io.Reader 接口,通过 NewDeco原创 2022-04-12 11:43:45 · 315 阅读 · 0 评论 -
Go知识点之随便记记(七)— Json,Xml数据格式转换
学习资料来自GitHub - unknwon/the-way-to-go_ZH_CN: 《The Way to Go》中文译本,中文正式名《Go 入门指南》数据格式转换1、JSON(json包)序列化(其它->json)1)Json与Go的类型对应(Go与Json的对应)bool — boolean float64 — number string — string nil — null2)结构体 -> Json编码将数据转为Json格式(1)func原创 2022-04-12 11:05:45 · 718 阅读 · 0 评论 -
LeetCode 打卡 Day 41 —— 二叉树的中序遍历
1、题目2、题解虽然是一道简单程度的题,却成功把我难住了,因为忘记了中序遍历什么样子🥲,复习一下吧前序遍历 “根左右” 中序遍历 “左根右” 后续遍历 “左右跟” 层序遍历,逐层从左到右访问节点一说二叉树遍历,脑子里第一个反应就是回溯,构思回溯的思路如下,首先遍历左子树,之后加入根节点,再对右子树进行遍历。本来以为题目给出的是前序遍历的数组,没想到直接给了链表形式的二叉树,难度瞬间就降下去了最后实现代码如下:/** * Definition for a binary原创 2022-04-11 10:37:51 · 495 阅读 · 0 评论 -
Go知识点之随便记记(六)— 数据读写(标准输入输出,文件,命令行)
学习资料来自GitHub - unknwon/the-way-to-go_ZH_CN: 《The Way to Go》中文译本,中文正式名《Go 入门指南》数据读写(标准输入/出 os.Stdin / os.Stdout :本质是*os.File类型)1、输入(才发现,学和写了一段时间go,居然连输入都没有好好了解过🤦♀️)1)fmt 包(1)fmt.Scanln :空格分隔值依次存入后续参数,直至换行fmt.Scanln(&firstName, &lastNa.原创 2022-04-11 10:01:54 · 722 阅读 · 0 评论 -
LeetCode 打卡 Day 40 —— 最小覆盖子串
1、题目2、题解困难级别的问题,不出意外把我困难住了😭,纠结了半天能否用动态规划进行解决,没想到动态规划的具体解决办法,所以还是直接去看题解了。题解使用了滑动窗口,印象中这是第一次看到滑动窗口算法,之前只在计算机网络中接触过,算法库中新增一员😊。具体的算法内容如下:...原创 2022-04-10 22:00:50 · 258 阅读 · 0 评论 -
Go知识点之随便记记(五)— 接口
1、接口(动态类型)1)接口定义一组方法,方法不含实现代码。2)接口内不能包含变量。3)按照约定,接口通过以下方式命名:方法名+er后缀,也可以able结尾或I开头。4)接口特性(1)接口隐式实现,类型不需要显示声明;(2)实现接口的类型除接口中方法外还可以有其他类型;(3)一个类型可实现多个接口;(4)接口类型可包含 一个 实例的(该实例的类型实现了该接口)引用。5)总结一下,其实就是通过 var 定义一个接口后,该接口可以赋值任意实现了接口方法的对象,具体举例如下:原创 2022-04-10 12:31:49 · 351 阅读 · 0 评论 -
Go知识点之随便记记(四)— 结构体
1、结构体1)不论是结构体类型或是指向结构体的指针,均使用 '.' 作为选择器符2)结构体工厂(惯例:工厂的名字以 new 或 New 开头),其实就是结构体的构造函数。构造结构体工厂后可以禁止使用new函数,强制用户使用工厂方法(实现类的私有化)3)注意 new 初始化返回指针,make 初始化返回类型本身4)结构体添加标签 :借助 reflect 包结构体可添加 Field,使用 Tag 属性type TagType struct { // tags field1 bool原创 2022-04-05 22:23:01 · 183 阅读 · 0 评论 -
Go知识点之随便记记(三)
1、Map1)Map可用函数或切片和数组(用于一个key对应多个value的情况)作为 value2)是引用类型3)长度可动态改变,不用new进行初始化(会返回空指针 nil)4)判断键值对是否存在_, ok := map1[key1] // 如果key1存在则ok == true,否则ok为falseif _, ok := map1[key1]; ok { // 可以结合if进行判断 // ...}delete(map1, key1)原创 2022-04-01 21:15:25 · 691 阅读 · 0 评论 -
LeetCode 打卡 Day 39 —— 单词搜索
1、题目2、题解看完题目后并没有想到较为简单的解决方法,所以准备暴力解题了,直接遍历二维数组确定word是否存在于数组中。原创 2022-03-31 19:12:47 · 228 阅读 · 0 评论 -
Go知识点之随便记记(二)
1、标签🏷️1)goto,continue,break(可跳出多重循环)都可以配合标签使用2)标签和goto并不推荐使用2、函数1)不允许函数重载,无范型2)函数可赋值给变量,本身属于一等值3)以函数为值的变量可以互相比较,指向同一函数签名/nil的变量视为相等4)不允许在函数内声明函数(匿名函数除外)5)参数默认使用按值传递(传递值的拷贝)6)允许可变长参数func Greeting(prefix string, who ...string)Greeting("原创 2022-03-31 17:49:36 · 190 阅读 · 0 评论 -
LeetCode 打卡 Day 38 —— 子集
今天解题内容引用了题解,链接如下作者:LeetCode-Solution链接:https://leetcode-cn.com/problems/subsets/solution/zi-ji-by-leetcode-solution/1、题目2、题解子集在枚举的过程中,记得二进制占位遍历的方法!!! (来自题解的图 n = 3,a ={5, 2, 9}时)最后的实现代码如下func subsets(nums []int) [][]int { res := [][].原创 2022-03-29 22:58:36 · 204 阅读 · 0 评论 -
Go相关知识点之随便记记(一)
在这里随便记记我在Go学习中遇到的容易忘记的点,或者印象让我比较深的点。1、if-else1)判断操作系统类型 if runtime.GOOS == "windows" { } else { // Unix-like }2)if 中可包含初始化语句if initialization; condition { // do something}3)多返回值函数错误(1)发生错误的同时终止程序的运行if err != nil { fmt.Printf("P原创 2022-03-29 22:10:44 · 1123 阅读 · 0 评论 -
Go自学记录 :string的相关操作
1、包含关系(1)功能:判断字符串 str 的开头是否为 prefix 返回:true 开头是prefix;false 开头不是prefixstrings.HasPrefix(str, prefix string) bool(2)判断字符串 str 的结尾是否为 prefix 返回:true 结尾是prefix;false 结尾不是prefixstrings.HasSuffix(str, suffix string) bool(3)判断字符串 ...原创 2022-03-28 22:45:57 · 2534 阅读 · 0 评论 -
LeetCode 打卡 Day 37 —— 编辑距离
1、题目2、题解刚开始看到题目完全没有思路,就感觉到怕是要用动态规划,去看了题解,果然。。。动态规划dp的内容真的很难确认啊,具体解题思路如下:(1)dp[i][j]含义:word1的前i个字符和word2的前j个字符之间的最短距离(2)初始化:dp[0][0]=0;dp[0][0:j]=j;dp[0:i][0]=i(3)动态规划过程:当word1[i]==word2[j] :dp[i][j]=min(dp[i-1][j]+1, dp[i][j-1]+1, dp[i-1][j-.原创 2022-03-27 20:05:30 · 434 阅读 · 0 评论 -
LeetCode 打卡 Day 36 —— 颜色分类
1、题目2、题解看到题目中说不能使用库中的sort函数,所以突发奇想决定自己实现快排序试试,顺便回忆快排,谁能想到还踩了不少坑,具体快排算法就不粘贴了,网上好多,我的代码如下。func sortColors(nums []int) { qsort(nums, 0, len(nums)-1) return}func qsort(arr []int, start, end int) { // fmt.Println("----") // fmt.Printl原创 2022-03-23 23:05:53 · 231 阅读 · 0 评论 -
LeetCode 打卡 Day 35 — 爬楼梯
1、题目2、题解脑海中瞬间闪过了排列组合,然后考虑如何实现排列组合以及如何排列(1)首先全1必然是一种情况(2)其次每少两个1即可多一个2,考虑之后即可对2的位置进行组合(3)假设以 代表组合情况,n为1和2的总数,m为2的个数。实现代码如下func climbStairs(n int) int { sum:=1 twoNum:=n/2 for i:=1; i<=twoNum; i++{ // fmt.Println(n-i, i原创 2022-03-22 22:14:58 · 317 阅读 · 0 评论