![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
.Passion
欢迎来看我的博客 ,原博客地址: https://www.cnblogs.com/lyr-2000/
现决定重新启用博客园的博客,一部分比较浅的笔记将写到这个博客上
欢迎打扰,另外,个人博客网站也搭建成功,欢迎打扰:
https://lyr-2000.github.io/
展开
-
golang判空的几种方法
如果有类型的指针转为了 interface{} 之后, 其实现原理是 go 用 一个 eface的结构体表示 interface{} 类型, eface 有两个字段,一个是type表示类型,一个是 unsafe.Pointer 用来表示指针指向的地址, 可以用 unsafe.Pointer 的方式转回来,然后单独判断 interface{} 值指向的地址即可。带类型的指针 转成 interface{} 后 无法在判断是否为空指针, 解决的方法。原创 2022-12-14 15:04:53 · 3524 阅读 · 1 评论 -
cpp 调用dll写法
go语言编译 dllSET CGO_ENABLED=1go build -ldflags "-w -s" -o searchEngine.dll -buildmode=c-shared shared.go//export Initfunc Init(ppath string) { mu.Lock() defer mu.Unlock() change = true loadPath = ppath}//export RemoveIndexfunc RemoveIndex原创 2022-04-10 22:51:29 · 684 阅读 · 0 评论 -
golang epoll 实现简单的tcp server
golang epoll 实现 tcp serverpackage epollimport ( "log" "net" "reflect" "sync" "syscall" "golang.org/x/sys/unix")func SetLimit() (err error) { var rLimit syscall.Rlimit if err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit); err != n原创 2022-01-24 13:50:30 · 833 阅读 · 0 评论 -
golang实现AVL树算法 【AVL树】【算法】【golang】
golang avl树算法package mainimport ( "fmt")var nodeCnt inttype Node struct { val int left, right *Node h int}func max(i, j int) int { if i > j { return i } return j}func min(i, j int) int { if i < j { return i原创 2022-01-19 16:28:21 · 532 阅读 · 0 评论 -
golang实现简单的websocket【golang】【websocket】
golang 实现 websocket具体可以参考GitHub上的代码package websocketimport ( "bytes" "github.com/gorilla/websocket" "log" "net/http" "time")var ( newline = []byte{'\n'} space = []byte{' '} // Time allowed to write a message to the peer. writeWait = 10 *原创 2022-01-18 16:55:00 · 3005 阅读 · 0 评论 -
和最小的 k 个数对【堆】【golang】【优先队列算法】
golang优先队列算法剑指 Offer II 061. 和最小的 k 个数对Difficulty: **给定两个以升序排列的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。 示例 1: 输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3 输出: [1,2],[1,4],原创 2022-01-18 14:46:17 · 316 阅读 · 0 评论 -
golang 时间语法
golang time包语法 记录func main() { //3s 无法获得锁,就退出,不抢锁了 //for i := 0; i < 20; i++ { // go worker(i) //} //time.Sleep(time.Second*40) //03 和 15等价 fmt.Println(time.Now().Format("2006-01-02 03:04:05")) fmt.Println(time.Now().Format("2006-01-02 15:04:05原创 2022-01-17 12:40:45 · 66 阅读 · 0 评论 -
跳跃游戏【贪心】【dp】【golang】
描述给定一个非负整数数组nums,假定最开始处于下标为0的位置,数组里面的每个元素代表下一跳能够跳跃的最大长度。如果能够跳到数组最后一个位置,则返回true,否则返回false。输入:[2,1,3,3,0,0,100]返回值:true说明:首先位于nums[0]=2,然后可以跳2步,到nums[2]=3的位置,再跳到nums[3]=3的位置,再直接跳到nums[6]=100,可以跳到最后,返回true题目链接package main// import "fmt"/** * 代码中的原创 2022-01-15 00:47:40 · 2328 阅读 · 0 评论 -
编辑距离【经典题】【dp】【golang】
描述给定两个字符串 str1 和 str2 ,请你算出将 str1 转为 str2 的最少操作数。你可以对字符串进行3种操作:1.插入一个字符2.删除一个字符3.修改一个字符。字符串长度满足 ,保证字符串中只出现小写英文字母。package main// import "fmt"func min(a ...int) int { v:= a[0] for _,t := range a { if v>t { v = t原创 2022-01-15 00:36:38 · 361 阅读 · 0 评论 -
二进制加法算法 【大数加法】【golang 】
描述给定两个用字符串表示的二进制数,返回他们的和。数据范围:字符串长度满足 ,字符串中只含有 0 和 1,且保证除 0 以外的二进制数没有前导零的情况。输入:“101”,“1”复制返回值:“110”package main// import "fmt"func reverse(a []byte) { for i,j :=0,len(a)-1;i<j;i,j = i+1,j-1 { a[i],a[j] = a[j],a[i] }}func min原创 2022-01-14 23:46:13 · 408 阅读 · 0 评论 -
剑指 Offer II 009. 乘积小于 K 的子数组【滑动窗口算法, golang版本】
剑指 Offer II 009. 乘积小于 K 的子数组Difficulty: **给定一个正整数数组 nums和整数 k ,请找出该数组内乘积小于 k 的连续的子数组的个数。 示例 1: 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8 个乘积小于 100 的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。 需要注意的是 [10,5,2] 并不是乘积小于100的子数组。 示例 2: 输入: nu原创 2022-01-14 17:43:11 · 216 阅读 · 0 评论 -
剑指 Offer II 008. 和大于等于 target 的最短子数组【滑动窗口算法-golang版本】
剑指 Offer II 008. 和大于等于 target 的最短子数组Difficulty: **给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组原创 2022-01-14 17:30:45 · 87 阅读 · 0 评论 -
剑指 Offer II 007. 数组中和为 0 的三个数【golang】
剑指 Offer II 007. 数组中和为 0 的三个数Difficulty: **给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c ,使得 a + b + c = 0 ?请找出所有和为 0 且 不重复 的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 示例 2: 输入:nums = [] 输出:[] 示例 3: 输入:nums = [0] 输出:[] 提示: 0 <=原创 2022-01-14 17:21:29 · 278 阅读 · 0 评论 -
剑指 Offer II 001. 整数除法 【golang】
剑指 Offer II 001. 整数除法Difficulty: **给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 ‘*’、除号 ‘/’ 以及求余符号 ‘%’ 。 注意: 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231−1]。本题中,如果除法结果溢出,则返回 231 − 1 示例 1: 输原创 2022-01-14 17:03:42 · 841 阅读 · 0 评论 -
NC91 最长上升子序列(三)
描述给定数组 arr ,设长度为 n ,输出 arr 的最长上升子序列。(如果有多个答案,请输出其中 按数值(注:区别于按单个字符的ASCII码值)进行比较的 字典序最小的那个)输入:[2,1,5,3,6,4,8,9,7]返回值:[1,3,4,8,9]package mainimport "sort"/** * retrun the longest increasing subsequence * @param arr int整型一维数组 the array * @return int原创 2022-01-13 22:42:21 · 281 阅读 · 0 评论 -
NC88 寻找第K大
描述有一个整数数组,请你根据快速排序的思路,找出数组中第 k 大的数。给定一个整数数组 a ,同时给定它的大小n和要找的 k ,请返回第 k 大的数(包括重复的元素,不用去重),保证答案存在。要求:时间复杂度 O(nlogn),空间复杂度 O(1)数据范围:0\le n \le 10000≤n≤1000, 1 \le K \le n1≤K≤n,数组中每个元素满足 0 \le val \le 100000000≤val≤10000000输入:[1,3,5,2,2],5,3返回值:2packa原创 2022-01-13 22:28:12 · 51 阅读 · 0 评论 -
NC74 数字在升序数组中出现的次数
描述给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数数据范围:0 \le n \le 1000 , 0 \le k \le 1000≤n≤1000,0≤k≤100,数组中每个元素的值满足 0 \le val \le 1000≤val≤100要求:空间复杂度 O(1),时间复杂度 O(logn)输入:[1,2,3,3,3,3,4,5],3 返回值:4package main/** * * @param data int整型一维数组 *原创 2022-01-13 21:45:34 · 3278 阅读 · 0 评论 -
NC73 数组中出现次数超过一半的数字
描述给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。数据范围:n \le 50000n≤50000,数组中元素的值 0 \le val \le 100000≤val≤10000要求:空间复杂度:O(1),时间复杂度 O(n )输入描述:保证数组输入非空,且保证有解package main/** * * @param n原创 2022-01-13 21:34:34 · 104 阅读 · 0 评论 -
NC69 链表中倒数最后k个结点
描述输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。数据范围:0 \leq n \leq 10^50≤n≤105,0 \leq a_i \leq 10^90≤ai≤109,0 \leq k \leq 10^90≤k≤109要求:空间复杂度 O(n) ,时间复杂度 O(n)进阶:空间复杂度 O(1) ,时间复杂度 O(n)例如输入{1,2,3,4,5},2时,对应的链表结构如下图所示:p原创 2022-01-13 21:19:49 · 226 阅读 · 0 评论 -
NC67 汉诺塔问题
汉诺塔问题描述我们有由底至上为从大到小放置的 n 个圆盘,和三个柱子(分别为左/中/右即left/mid/right),开始时所有圆盘都放在左边的柱子上,按照汉诺塔游戏的要求我们要把所有的圆盘都移到右边的柱子上,要求一次只能移动一个圆盘,而且大的圆盘不可以放到小的上面。请实现一个函数打印最优移动轨迹。给定一个 int n ,表示有 n 个圆盘。请返回一个 string 数组,其中的元素依次为每次移动的描述。描述格式为: move from [left/mid/right] to [left/mid原创 2022-01-13 21:09:12 · 1714 阅读 · 0 评论 -
NC8 二叉树中和为某一值的路径(二)
输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n如二叉树root为{10,5,12,4,7},expectNumber为22输入:{10,5,12,4,7},22复制返回值:[[10,5,7],[10,12]]复制说明:返回[[10,12],原创 2022-01-13 00:35:52 · 78 阅读 · 0 评论 -
NC7 买卖股票的最好时机(一)
描述假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天2.如果不能获取到任何利润,请返回03.假设买入卖出均无手续费输入:[8,9,2,5,4,7,1]复制返回值:5复制说明:在第3天(股票价格 = 2)的时候买入,在第6天(股票价格 = 7)的时候卖出,最大利润 = 7-2 = 5原创 2022-01-13 00:22:47 · 79 阅读 · 0 评论 -
NC6 二叉树中的最大路径和
描述二叉树里面的路径被定义为:从该树的任意节点出发,经过父=>子或者子=>父的连接,达到任意节点的序列。注意:1.同一个节点在一条二叉树路径里中最多出现一次2.一条路径至少包含一个节点,且不一定经过根节点给定一个二叉树的根节点root,请你计算它的最大路径和例如:给出以下的二叉树,其中一条最大路径为:15=>20=>6,路径和为15+20+6=41package mainimport . "nc_tools"/* * type TreeNode struc原创 2022-01-13 00:15:07 · 3289 阅读 · 0 评论 -
NC3 链表中环的入口结点
链表环入口算法实现给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。2*(x+y) = x+y + z + yx+y = z+yz = x最终得出bc 这段距离等于 ac这段距离package mainfunc EntryNodeOfLoop(p *ListNode) *ListNode{ if p == nil { return nil } var fast,slow *ListNode fast = p原创 2022-01-12 23:58:46 · 289 阅读 · 0 评论 -
golang 归并排序算法实现
归并排序算法实现描述给定一个长度为 n 的数组,请你编写一个函数,返回该数组按升序排序后的结果。要求:时间复杂度 O(nlogn) ,空间复杂度 O(n) 示例1package main// import "fmt"/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 将给定数组排序 * @param arr int整型一维数组 待排序的数组 * @return int整型一维数组*/func merge_sort(arr,temp []int,原创 2022-01-12 22:21:20 · 170 阅读 · 0 评论