Go语言中文网 为您找到相关结果 141

Go语言的堆排序实现

关于堆排序的算法,可以参考我去年的文章《堆排序(HEAP SORT)》。那篇文章讲的是建立小顶堆进行的排序,这里说的是建立大顶堆建立的排序,差不多。 在Golang源码的sort包里,自带了排序函数。该函数可以对各种类型进行排序,只不过该类型需要实现三个函数,使得该类能够实现Interface接口。 type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i should sort before the element with index j. Less(i, j int...阅读全文

安全的Go语言从源数组构建目标Slice

今天在QQ群里聊到GO语言需要改进的地方,快乐的吐槽了一番。我之前最希望用数组构建slice的语法变更一下,因为现在流行的[start:end]方式并不严谨。后来不记得是哪个版本的时候,引入了三段式的[start:end:max]语法来创建slice。这样是安全了,但是确丑了很多。 如下例所示,二段式的定义在append操作后会污染到源数组: a := [5]int{1, 2, 3, 4, 5} s1 := a[1:3:3] s2 := a[1:3] _ = append(s1, 6) fmt.Println(a) //out:[1 2 3 4 5] _ = append(s2, 7) fmt.Println(a) //out:[1 2 3 7 5] 关于对new函数的改进,chai大帮我发...阅读全文

博文 2014-11-11 18:00:02 sz_Promi

【Leetcode】:Counting Bits问题 in Go语言

Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array. Example: For num = 5 you should return [0,1,1,2,1,2]. Follow up: It is very easy to come up with a solution with run time O(n*sizeof(integer)). But can you do it in linear time...阅读全文

博文 2016-04-14 21:00:02 u013564276

十六进制字符串转换为二进制,试过多个方法,求解?

类似这样的字符串(96659ee67b39f2d9c3418cddaa307c5e1640a6e883f3fa9540e846ad1221b990ba9ac28ebb2e4daf2ea039cc929b9e7d6),希望实现和php的hex2bin一样的效果,试过fmt.Sprintf,strconv.ParseUint等多个方法,Stack Overflow也找过,并没有完全解决的方法,主要是转换之后的长度不对,希望有接触过这个的解一下惑...阅读全文

6.Golang数字操作

Go 语言具有严格的静态类型限制,运算符操作的数字类型必须是相同类型数据。且数字操作不能超出该类型的取值范围,不然计算溢出得到的结果就是错的。 一、加减乘除、取模 package main import "fmt" func main() { // 加 + var ui1, ui2 uint8 ui1 = 1 ui2 = 2 ui := ui1 + ui2 fmt.Println(ui) // 输出:3 ui += 255 fmt.Println(ui) // 溢出后计算的值就是错的,输出:2 // 减 - var i, j int32 i = 10 j = 5 fmt.Println(i - j) // 输出:5 // 乘 * var f1, f2 float32 f1 = 1.2 f2 ...阅读全文

博文 2018-11-11 22:34:40 野尘lxw

golang 手撸 平衡二叉树

golang 手撸 平衡二叉树 树是一种计算机数据结构中非常常用的一种结构,其中就包含了:平衡二叉树,这种树是一种特殊的二叉查找树(二叉查找树也就是,右孩子大于其父结点,左孩子小于其父结点的树),但是简单的二叉查找树存在的问题就是不平衡,最差的查找效率为O(n),故就有人发明了一种平衡的额二叉查找树。 特点 平衡二叉树是一种二叉查找树 每个结点的左子树的高度减去右子树的高度的绝对值不超过1 空树和左右子树都是平衡二叉树 相比红黑树,平衡二叉树比较适用于没有删除的情况 平衡因子 平衡二叉树是在二叉查查找树的基础上进行构建了,为了维持平衡二叉树的平衡,那么就需要一种机制来判断平衡二叉树是否是平衡的。这种机制就叫做平衡因子。 平衡二叉树的每个结点都会维持一个值,这个值就是平衡因子,这个平衡因子就是...阅读全文

博文 2019-07-14 17:32:43 _AlphaBaby_

golang的命令解析

go build 对于普通包没有任何效果对于main包,生成可执行的二进制文件 go install对于普通包,生成对应的a文件,并且放在GOPATH的pkg文件下对于main包,生成对应的可执行的二进制文件,并且在GOPATH的bin目录下 go clean清理当前目录下go生成的文件 go clean -i清理go install之后在GOPATH下生成的文件 go fmt 或者 gofmt 格式化代码 go test 执行所有*_test.go测试文件 go doc 帮助文...阅读全文

博文 2016-08-29 12:00:00 datakv

golang 统计uint64 数字二进制存储中1的数量

package mainimport ( "fmt")// pc[i] is the population count of i.var pc [256]bytefunc init() { for i := range pc { pc[i] = pc[i/2] + byte(i&1) }}func PopCount(x uint64) int { return int(pc[byte(x>>(0*8))] + pc[byte(x>>(1*8))] + pc[byte(x>>(2*8))] + pc[byte(x>>(3*8))] + pc[byte(x>>(4*8))] + pc[byte(x>>(5*8))] + pc[byte(x>>(6*8))] + pc[byte(x>>(7*8))...阅读全文

博文 2018-07-21 00:30:01 barfoo

go build 和 go install 的区别

go install/build都是用来编译包和其依赖的包。 区别: go build只对main包有效,在当前目录编译生成一个可执行的二进制文件(依赖包生成的静态库文件放在$GOPATH/pkg)。 go install一般生成静态库文件放在$GOPATH/pkg目录下,文件扩展名a.只对main包有效,在当前目录编译生成一个可执行的二进制文件(依赖包生成的静态库文件放在$GOPATH/pkg)。 go install一般生成静态库文件放在$GOPATH/pkg目录下,文件扩展名a. 如果为main包,则会在$GOPATH/bin 生成一个可执行的二进制文件。,则会在$GOPATH/bin 生成一个可执行的二进制文件。 来自百度知道:...阅读全文

博文 2019-04-28 10:31:03 qq_22222663

Go语言用堆排序的方法进行一千万个int随机数排序.

上篇文章用的是quicksort方法排序,但是如果用快速排序法对重复率很高的slice排序的时候,时间复杂度会激增,速度相当慢 所以尝试了一下堆排序,实验结果,感觉挺好的.下面是代码,大家可以参考一下,这个是建立的大顶堆. 二叉树的特性: 最后一个非叶子节点 : root = length/2(当length为奇数的时候root向下取整) 在GO语言中的索引位置:root - 1, 左右孩子节点:child_l = 2*root,索引位置:child_l-1,右孩子的节点: 2*root+1 索引位置. package main import ( "fmt" "math/rand" ) func main() { Num := 10000000 var list []int for i :=...阅读全文

博文 2016-03-12 09:00:00 fyxichen

go语言浅析二叉树

Hello,各位小伙伴大家好,我是小栈君,今天给大家带来的分享是关于关于二叉树相关的知识点,并用go语言实现一个二叉树和对二叉树进行遍历。 我们主要针对二叉树的概念,go实战实现二叉树的前序遍历、中序遍历、后序遍历。 二叉树概念 在计算机科学领域内,二叉树代表的是具有两个节点的树形结构,通常子树被称作为“左子树”,右边的被称作为“右子树”。二叉树通常的应用于实现二叉查找树和二叉堆。 例如上述图片中,我们就制定了一个二叉树,其中d、e、f称作a树的叶子节点。 [叶子结点是离散数学中的概念。一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称“叶子”。 叶子是指出度为0的结点,又称为终端结点] b和c 作为树a的孩子结点,b和a因为作为一个根a的孩子,所以他们的称呼为兄弟结点。其实总结一点就...阅读全文

博文 2019-12-22 17:37:28 IT干货栈

[golang] 数据结构-堆排序

接上文 树形选择排序上篇也说了,树形选择排序相较简单选择排序,虽然减少了时间复杂度,但是使用了较多空间去储存每轮比较的结果,并且每次还要再和胜出节点比较。而堆排序就是为了优化这个问题而在1964年被两位大佬发明。 原理首先有几个关于树的定义: 如果一棵树每个节点的值都大于(小于)或等于其字节点的话,那么这棵树就是大(小)根树如果一棵大(小)根树正好又是完全二叉树,则被称为大根堆(小根堆) 堆排序就是利用大根堆(小根堆)的特性进行排序的。从小到大排序一般用大根堆,从大到小一般用小根堆。 流程 先把待排序的数组8、4、12、7、35、9、22、41、2用完全二叉树表示 按大根堆的特性把这个完全二叉树从最后一个非叶子节点开始比较,把较大值交换到当前位置。遇到上层节点顺序影响下层节点不满足大根堆特性...阅读全文

博文 2018-07-19 23:35:47 NicoChen

[golang] 数据结构-树形选择排序(锦标赛排序)

接上文 简单选择排序简单选择排序很容易理解,代码也很容易实现。但毕竟比较次数太多。树形选择排序则对这个问题进行了改进。 原理简单来说,树形选择排序(Tree selection sort)就是在选择完一轮找出最小值后,直接在与最小值比较中稍大的元素里筛选出最小的。这样避免了简单选择查询那种,抛弃了之前比较过的结果,每次都全部重新比较的情况。 流程举例 先列出所有待排序的元素如:8、4、12、7、35、9、22,并用他们组成满二叉树的叶子元素,不足的位置以∞作为补充。将元素两两相比较,分别得到较小值:4,7,9,22。再次两两比较,得到4,9。最终比较一次得到最小值4。由此构建出一个完整的满二叉树: 完成一轮比较后,将胜出者4的叶子节点改成∞,然后由它的兄弟节点8继续参加下一轮比较。从这次开始...阅读全文

博文 2018-07-15 12:36:10 NicoChen

LeetCode105. 从前序与中序遍历序列构造二叉树

描述 根据一棵树的前序遍历与中序遍历构造二叉树 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 思路 前序遍历中,第一个节点即根节点 在中序遍历中,找出第一个节点的位置,根节点前面的 L 个数据,即根节点左子树的中序遍历数据,前序遍历中根节点后面的 L 个数据即左子树的前序遍历 右子树同上 简而言之,确定了根节点,确定了左子树和右子树的数据,递归对左子树和右子树进行重建 代码实现 // 根据一棵树的前序遍历与中序遍历构造二叉树 // TreeNode Definition for a binary tree no...阅读全文

博文 2018-12-15 12:34:50 tomorrowwu

软件质量的思考

​作为一个软件工程师,我们天天生产着代码。看着满天飞的软件技术。突然回过头来看看,感觉到迷茫的走了很多路,缺少了思考。 ISO9126软件质量模型 ISO9126软件质量模型是评价软件质量的国际标准,由6个特性和27个子特性组成,在工作中需要从这些特性和子特性去设计和实现一个软件。这个模型也是软件质量标准的核心,对于大部分的软件,都可以考虑从这几个方面着手进行测评。 捕获2.JPG 软件质量铁三角 流程:从计划到策略的实现,流程就是按照这种思维方式指导软件开发的,并且流程来源于成功的经验,可以指导项目少走弯路,从而提高软件质量,不仅如此,流程还对项目的成本和进度控制有很大的帮助 技术:包括了分析技术、设计技术、编码技术、测试技术,需求是项目的灵魂,良好的需求分析便是项目成功的关键所在,若是需...阅读全文

博文 2020-03-08 09:32:40 陌若尘_c167

二叉树层序遍历BFS

leetcode 刷题记录 层序遍历模板,语言为 golang func bfs(p *TreeNode) []int { res := make([]int, 0) if p == nil { return res } queue := []*TreeNode{p} for len(queue) > 0 { length := len(queue) for length > 0 { length-- if queue[0].Left != nil { queue = append(queue, queue[0].Left) } if queue[0].Right != nil { queue = append(queue, queue[0].Right) } res = append(re...阅读全文

博文 2020-05-15 14:35:40 一位路过的假面骑士丶

Go基础-012 练习题集合

1.老鼠试毒 10 只老鼠(小白鼠),1000 瓶水,其中一瓶有毒药,老鼠喝毒药水 1 个小时死掉。 要求利用 10 只老鼠,在 1 个小时内找出那瓶水有毒。 经典思路: 将 1000 瓶水从 1 至 1000 编号。 将10只老鼠从 1 至 10 编号。 将水瓶的编号转为 2 进制数据,至多有 1000 瓶水,至多需要 10 个位即可。 例如: 之后控制老鼠喝水,将老鼠的编号与水瓶编号二进制位对应。如果某瓶水的编号第一位为 1,则让 1 号老鼠喝水,第二位为 1 则让 2 号老鼠喝水,以此类推。 等 1 个小时后,看死掉的老鼠,将对应的老鼠编号位设置为 1,其他为 0,转成 10 进制, 就是对应水瓶编号。 例如 1,456910 号老鼠死了,那就意味着编号:1100111001,转成 1...阅读全文

博文 2020-02-24 01:32:44 LikePlayAPiano

Golang学习笔记:体验Go的并发编程

当初之所以学习Go语言,就是因为一句话:Golang天生支持并发。Java中的并发是一个比较复杂的系统,前段时间面试的时候,对于我这种CRUD Boy来说,理解并能应付并发方面的问题着实有些难度。各种概念背了一遍又一遍,current包下的东西来回练习,理解各种并发系统的设计理念,才能勉强应付一些比较水的面试。 经过几天的学习,终于跟着Go指南,学到了并发一节。在这一节中,遇到的第一个练习是判断等价二叉树。 初始代码如下 package main import "golang.org/x/tour/tree" // Walk 步进 tree t 将所有的值从 tree 发送到 channel ch。 func Walk(t *tree.Tree, ch chan int) // Same 检...阅读全文

博文 2018-01-07 17:33:04 Coderztf

go语言学习-iota和左移右移的用法

在go语言中iota比较特殊,是一个被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字就会自动加1 左移运算符"<<“是双目运算符。左移n位就是乘以2的n次方。 其功能把”<<“左边的运算数的各二进位全部左移若干位,由”<<"右边的数指定移动的位数,高位丢弃,低位补0。 右移运算符">>“是双目运算符。右移n位就是除以2的n次方。 其功能是把”>>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数。 package iota import "fmt" func Test() { const( c1 = iota //c1=0 c2 = iota //c2=1 c3 = iota //c3=2 )...阅读全文

博文 2019-01-31 18:31:05 len_yue_mo_fu

go语言的字符和字符串

Go语言中的字符 在Go语言中,没有字符类型,字符类型是rune类型,rune是int32的别称。 下面用一个简单的程序来演示字符类型: package main import ( "fmt" "reflect" ) func main() { r := '我' fmt.Printf("%q的类型为:%t 二进制为:%b\n", r, r, r) rType := reflect.TypeOf(r).Kind() fmt.Printf("r的实际类型为:%s\n", rType) } 程序输出: '我'的类型为:%!t(int32=25105) 二进制为:110001000010001 r的实际类型为:int32 那我产生一个问题:Unicode字符的长度是多少?这个问题的问法有没有问题?其...阅读全文

博文 2016-10-26 14:00:01 davidsu33

判断一棵二叉树是否是平衡二叉树

所谓平衡二叉树,是指一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 3 / \ 9 20 / \ 15 7 返回真 1 / \ 2 2 / \ 3 3 / \ 4 4 返回假 递归算法(golang): /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func isBalanced(root *TreeNode) bool { if root == nil { return true } if isBalanced(root.Left) == false { re...阅读全文

博文 2018-12-20 16:34:48 波涛澎湃

程序员修仙之路--突破内存限制的高性能排序

菜菜的涨工资申请还在待审批中.... 作为一个技术人员,技术的问题还是要解决。经过线上日志的分析,日志采用小时机制,一个小时一个日志文件,同一个小时的日志文件有多个,也就是说同一时间内的日志有可能分散在多个日志文件中,这也是Y总要合并的主要原因。每个日志文件大约有500M,大约有100个。此时,如果你阅读到此文章,该怎么做呢?不如先静心想2分钟!! 问题分析 要想实现Y总的需求其实还是有几个难点的: 如何能把所有的日志文件按照时间排序 日志文件的总大小为500M*100 ,大约50G,所以全部加载到内存是不可能的 程序执行过程中,要频繁排序并查找最小元素。 那我们该怎么做呢?其中一个解决方案就是它:堆 解决方案 堆定义 堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个...阅读全文

比原链设计思考: 扩展性UTXO模型

用户模型是比原链在最初就需要确定的重要数据结构, 团队的选择还是聚焦在两种典型的模型系统中,Account模型和UTXO模型,和其他大多数区块链设计一样, 选择了模型就决定了协议层的重要实现,两种模型各有利弊,不同区块链针对想聚焦的场景自身会有判断。 UTXO 的起源(来自高明的中本聪) 中本聪对比特币的设计,让整个世界进入了数字货币时代。比特币起源于中本聪,UTXO出自比特币。自然,UTXO来自高明的中本聪。UTXO的优点: 在版本控制方面的考虑,svn 是中心化的数据库保持一份账本,这和区块链的设计自然是相违背的,git 是去中心化的数据库,但会保存太多冗余数据,对于分布式性能肯定是要大打折扣。UTXO数据库是抛弃了历史包袱的git, 只存储了最后一个版本。简易实用。 UTXO 具有天然...阅读全文

博文 2018-07-26 16:34:56 比原链Bytom

go语言,一些零碎没时间整理

os.Stdout.Write(row[0].([]byte)) //往标准输出时写入必须是二进制 fmt.Println(row[0].([]byte)) //输出结果 一个显示正常值 一个显示二进制值 astaxie6 [54] php json 时总会出现乱码 头六个字符 但是在linux上用文本编辑器打开后就没有了 这个有可能跟utf8的bom头有关 没有进一步确...阅读全文

剑指offer算法---Go实现

简介 最近在准备面试,发现一个不错的网站推荐给大家。也希望通过Go实现来把里面 剑指offer算法 的题做一下。如果觉得帮到了你,希望能为我点个赞呀。如果发现代码有错,非常希望您能够在留言中指出。https://github.com/CyC2018/CS...文章只贴自己写的代码,题目的所有内容和解题思路都在上面的网站里。一些比较简单无聊的题,就跳过。。 未完待续。 归并排序,快排,堆排序 这一节不出现在剑指offer里边,但是经常面试问到。1.归并排序 package main import ( "math/rand" "time" ) // 产生n个随机数 func CreateList(list []int, n int) []int { s1 := rand.NewSource(ti...阅读全文

博文 2019-08-13 21:02:40 l1nkkk

Golang-基于TimeingWheel定时器

设计思路 在linux下实现定时器主要有如下方式 基于链表实现定时器 基于排序链表实现定时器 基于最小堆实现定时器 基于时间轮实现定时器 在这当中基于时间轮方式实现的定时器时间复杂度最小,效率最高,然而我们可以通过优先队列实现时间轮定时器。 优先队列的实现可以使用最大堆和最小堆,因此在队列中所有的数据都可以定义排序规则自动排序。我们直接通过队列中pop函数获取数据,就是我们按照自定义排序规则想要的数据。 在Golang中实现一个优先队列异常简单,在container/head包中已经帮我们封装了,实现的细节,我们只需要实现特定的接口就可以。 下面是官方提供的例子 // This example demonstrates a priority queue built using the hea...阅读全文

博文 2017-09-02 12:05:38 wiseAaron

面试经典算法:优先队列,最大堆,堆排序,左偏树Golang实现

堆排序 使用优先队列-最小/最大堆可实现。 优先队列 优先队列是一种能完成以下任务的队列:插入一个数值,取出最小的数值(获取数值,并且删除)。优先队列可以用二叉树来实现,我们称这种为二叉堆。 最小堆 最小堆是二叉堆的一种,是一颗完全二叉树(一种平衡树), 其特点是父节点的键值总是小于或者等于子节点。 实现细节(两个操作): push:向堆中插入数据时,首先在堆的末尾插入数据,然后不断向上提升,直到没有大小颠倒时。 pop:从堆中删除最小值时首先把最后一个值复制到根节点上,并且删除最后一个数值。然后不断向下交换, 直到没有大小颠倒为止。在向下交换过程中,如果有两个子儿子都小于自己,就选择较小的 插入时间复杂度O(logN),删除时间复杂度O(logN),两个二叉堆合并时间复杂性O(NlogN)...阅读全文

博文 2019-10-28 11:32:48 aside section._1OhGeD

Go语言如何编译出和GCC完全一致的ELF 二进制文件

* 在项目中需要开发一个程序部署到客户的服务器, * 为了防止程序逻辑被反编译,所以采购了威步的加密服务 * 但是,威步在加密GCC编译的二进制可以争取执行 * 而用来加密go 编译出来的二进制,一执行就Segment Fault * 哪位大侠知道如何可以让go编译出与Gcc完全一致的ELF二进制文件呢? * 多...阅读全文

《Go语言四十二章经》第九章 运算符

《Go语言四十二章经》第九章 运算符 作者:李骁 ## 9.1 内置运算符 * 算术运算符 * 关系运算符 * 逻辑运算符 * 位运算符 * 赋值运算符 * 其他运算符 Go语言的算术运算符: |运算符|含义|示意| |:--|:--|:--| |+ |相加 |A + B | |- |相减 |A - B | |* |相乘 |A * B | |/ |相除 |B / A 结果还是整数 8/3=2| |% |求余 |B % A | |++ |自增 |A++ 1| |-- |自减 |A-- | Go语言的关系运算符: |运算符|含义|示意| |:--|:--|:--| |== |检查两个值是否相等。|(A == B) 为 False| |!= |检查两个值是否不相等。|(A != B) 为 True...阅读全文

博文 2018-09-25 20:39:31 roteman

[用Golang刷LeetCode之 4] 476. Number Complement

题目描述 Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation. Note: The given integer is guaranteed to fit within the range of a 32-bit signed integer. You could assume no leading zero bit in the integer's binary representation. Example 1: Input: 5 Output: 2 Explanation: The b...阅读全文

博文 2017-08-14 09:05:01 miltonsun

1>Golang字符串常用操作

字符,字节 // 字符串 s := "hello 皇甫村" // 单独的字母,汉字,符号表示一个字符 c1 := 'h' c2 := '皇' // 字节。一个字节=8bit(8个二进制位) // 一个'A' =1一个字节 // 一个utf8编码的汉字 '砂' = 一般占用3个字节 1kb = 1024字节 字符串 package main import ( "fmt" "strings" ) // 字符串相关操作 var s3 = "C:\\Windows\\SoftwareDistribution\\Download" func main() { // 字符串长度 fmt.Println(len(s3)) // 字符串拼接 name := "理想" world := "dsb" fmt.P...阅读全文

博文 2020-01-28 21:32:42 三人行大道

数据结构和算法(Golang实现)(17)常见数据结构-树

树 树是一种比较高级的基础数据结构,由n个有限节点组成的具有层次关系的集合。 树的定义: 有节点间的层次关系,分为父节点和子节点。 有唯一一个根节点,该根节点没有父节点。 除了根节点,每个节点有且只有一个父节点。 每一个节点本身以及它的后代也是一棵树,是一个递归的结构。 没有后代的节点称为叶子节点,没有节点的树称为空树。 二叉树:每个节点最多只有两个儿子节点的树。 满二叉树:叶子节点与叶子节点之间的高度差为0的二叉树,即整颗树是满的,树呈满三角形结构。在国外的定义,非叶子节点儿子都是满的树就是满二叉树。我们以国内为准。 完全二叉树:叶子节点与叶子节点之间高度差不会超过1的二叉树,即一个节点的左右子树的高度不会超过一层,也称平衡二叉树。 树根据儿子节点的多寡,有二叉树,三叉树,四叉树等,我们这...阅读全文

Golang:基本的数据类型

golang中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、channel等 基本数据类型 整型 整型分为两大类: 按长度:int8、int16、int32、int64 无符号整型:uint8、uint16、uint32、uint64 类型 描述 uint8 无符号8位整型(0到255) uint16 无符号16位整型(0到65535) uint32 无符号32位整型(0到4294967295) uint64 无符号64位整型(0到18446744073709551615) int8 有符号8位整型(-128到127) int16 有符号 16位整型 (-32768 到 32767) int32 有符号 32位整型 (-2147483648...阅读全文

41. 等价二叉树

实现两个二叉树的比较。二叉树的基本类型和函数来源于 “golang.org/x/tour/tree”,为了避免网络问题影响代码运行,我把源码直接加入到了代码中。 // A Tree is a binary tree with integer values. type Tree struct { Left *Tree Value int Right *Tree } // New returns a new, random binary tree holding the values k, 2k, ..., 10k. func New(k int) *Tree { var t *Tree for _, v := range rand.Perm(10) { t = insert(t, (1+v)*...阅读全文

博文 2017-08-31 07:35:35 厚土火焰山

golang 语言 LeedCode104 二叉树的最大深度

golang 语言 LeedCode104 二叉树的最大深度 func maxDepth(root *TreeNode) int { if root==nil { return 0 } if root.Left==nil && root.Right ==nil{ return 1 } i := depth(root) return i } func depth(root *TreeNode) int { queue := list.New() queue.PushBack(root) var maxDeep int=0 for{ len := queue.Len() if len== 0 { break } for i:=0;i阅读全文

博文 2018-12-19 10:34:45 稻田夕阳

二叉树 前/中/后/层 四种方式遍历递归实现

二叉树的遍历,无论是在leetcode刷题或者面试过程中,都是十分常见,重要性无需赘述。本文将采用Golang语言来实现前/中/后/层四种遍历方式。 二叉树定义 // 二叉树节点定义 type TreeNode struct { Val int Left *TreeNode // 左子树 Right *TreeNode // 右子树 } 二叉树样例 一. 前序遍历 遍历顺序   中 -> 左 -> 右。 代码实现 // 前序遍历 func PreOrderTraversal(tree *TreeNode) { if tree == nil { return } fmt.Printf(" %d -> ", tree.Val) PreOrderTraversal(tree.Left) PreOr...阅读全文

博文 2020-01-04 19:32:51 缘木求鱼的鱼

[用Golang刷LeetCode之 1] 461. Hamming Distance

题目描述 https://leetcode.com/problems/hamming-distance/description/ The Hamming distance between two integers is the number of positions at which the corresponding bits are different. Given two integers x and y, calculate the Hamming distance. Note: 0 ≤ x, y< 2^31. Example: Input: x = 1, y = 4 Output: 2 Explanation: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ The abo...阅读全文

博文 2017-08-14 09:05:02 miltonsun

leetcode 回溯题目 golang语言

回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就 “回溯” 返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为 “回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。 链接:https://leetcode-cn.com/tag/backtracking/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 本文主要总...阅读全文

博文 2019-09-19 00:33:15 努力的C

golang 随笔

go blog随笔 最近看go blog, 发现go升级到1.7了,最大的改进是编译的二进制文件缩小了近30%. 那么这30%是怎么来的呢,什么特征使其压缩了文件大小: ssa (Static Single Assignment,静态单赋值) 编译方法,压缩5% method pruning 方法修剪,压缩15% compact format 更合适的格式, 压缩5-15% 其中method prying 和compact format都涉及到了reflect包。那接下来我们就说说golang 的reflect吧。 deep equal:以前写utest的时候,比较map,只能比较各长度,现在有了reflect.DeepEqual,终于可以深度比较了。 a := map[int]string...阅读全文

博文 2016-09-07 08:00:10 panda1986_meng

数据结构和算法(Golang实现)(27)查找算法-二叉查找树

二叉查找树 二叉查找树,又叫二叉排序树,二叉搜索树,是一种有特定规则的二叉树,定义如下: 它是一颗二叉树,或者是空树。 左子树所有节点的值都小于它的根节点,右子树所有节点的值都大于它的根节点。 左右子树也是一颗二叉查找树。 二叉查找树的特点是,一直往左儿子往下找左儿子,可以找到最小的元素,一直往右儿子找右儿子,可以找到最大的元素。 看起来,我们可以用它来实现元素排序,可是我们却使用了二叉堆来实现了堆排序,因为二叉查找树不保证是一个平衡的二叉树,最坏情况下二叉查找树会退化成一个链表,也就是所有节点都没有左子树或者没有右子树,树的层次太深导致排序性能太差。 使用二分查找,可以很快在一颗二叉查找树中找到我们需要的值。 我们来分析二叉查找树添加,删除,查找元素的方法。 一、添加元素 以下是一个二叉查...阅读全文

博文 2020-04-07 16:32:51 陈星星

04Go基本语法

Go基本语法 [TOC] 1、运算符 Go 语言内置的运算符有:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其他运算符。 (1)算数运算符 运算符 描述 + 相加 - 相减 * 相乘 / 相除 % 求余 ++ 自增 -- 自减 (2)关系运算符 运算符 描述 == 检查两个值是否相等,如果相等返回 True 否则返回 False。 != 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 > 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 < 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 >= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 <= 检查左边值是否小于等于右边值,如果...阅读全文

二叉树 队列 数组 层次遍历

bfs 和 队列 学过数据结构的都知道,二叉树的层次遍历。 层次遍历利用的数据结构是队列。 那么, 思考一下 为什么层次遍历,要用到队列,而不是其他的数据结构,比如栈呢?换句话说,队列在二叉树的层次遍历过程中起到了什么作用呢? 队列在二叉树层次遍历中的作用 我们知道,二叉树的结构如下: /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ 从结构中大致可以知道,二叉树的根跟左右还是是采用链表的形式联系的,父节点,保存了左右孩子的指针,所以,我们知道了父节点,必然也就知道了左右孩子的信息。 但是,在一个二叉树中,同...阅读全文

博文 2019-08-04 19:02:38 timehorse

leetcode 第163场周赛

5263. 二维网格迁移 给你一个 n 行 m 列的二维网格 grid 和一个整数 k。你需要将 grid 迁移 k 次。 每次「迁移」操作将会引发下述活动: 位于 grid[i][j] 的元素将会移动到 grid[i][j + 1]。 位于 grid[i][m - 1] 的元素将会移动到 grid[i + 1][0]。 位于 grid[n - 1][m - 1] 的元素将会移动到 grid[0][0]。 请你返回 k 次迁移操作后最终得到的 二维网格。 拿golang刷题简直有病 执行结果:通过 执行用时 :32 ms, 在所有 golang 提交中击败了100.00%的用户 内存消耗 :6.2 MB, 在所有 golang 提交中击败了100.00%的用户 func pos(n int,...阅读全文