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

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

[leetcode in golang]100、相同的树

递归方法 /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func isSameTree(p *TreeNode, q *TreeNode) bool { if p==nil&&q==nil{ return true } if p==nil||q==nil||p.Val!=q.Val{ return false } return isSameTree(p.Right,q.Right)&&isSameTree(p.Left,q.Left) } 时间复杂度O(N) 空间复杂度O(1...阅读全文

博文 2019-09-25 00:32:51 aside section ._1OhGeD

【原创】树莓派3B开发Go语言(四)-自写库实现pwm输出

在前一小节中介绍了点亮第一个LED灯,这里我们准备进阶尝试下,输出第一段PWM波形。(PWM也就是脉宽调制,一种可调占空比的技术,得到的效果就是:如果用示波器测量引脚会发现有方波输出,而且高电平、低电平的时间是可调的。) 这里爪爪熊准备写成一个golang的库,并开源到github上,后续更新将直接更新到github中,如果你有兴趣可以简书和我联系。 github.com/dpawsbear/bear_rpi_go 一、树莓派的PWM 我在很多的教程中都看到说树莓派的PWM(硬件)只有一个GPIO能够输出,就是 GPIO1。这可是不小的打击,因为我想使用至少四个 PWM ,还是不死心,想通过硬件手册上找寻蛛丝马迹,看看究竟怎么回事。 手册上找寻东西稍等下讲述,这里先提供一种方法测试 树莓派3...阅读全文

博文 2017-08-31 14:05:03 爪爪熊大坏蛋

在树莓派上搭建gitea

概述自己搭建git 服务的解决方式有很多,昨天我在服务器上搭建了gitlab,没错gitlab是很强大,功能很完全,但是安装在树莓派上太卡了,安装在我的vps上也很卡,所以我想到了gitea,虽然功能不是特别强大,但是很齐全,而且搭建很方便。 下载运行首先gitea安装方式有很多,最简单的就是使用二进制文件安装,首先下载这个二进制文件,注意树莓派是armv7的,所以下载下面这个文件wget https://dl.gitea.io/gitea/master/gitea-master-linux-arm-7下载页面在下面这个网址https://dl.gitea.io/gitea/master/接着重命名一下mv gitea-master-linux-arm-7 gitea赋予可执行权限chmod...阅读全文

博文 2017-10-27 08:59:23 Bboysoul

树莓派上编译 Go and 安装 Cow

PS:老Blog文章转移, 年代久远, 连接可能已失效. Cow 是不错的软件,相当好用,我在公司是直接把它挂到了服务器上,然后办公室的人都在用它。但是回到了家里我就无法用移动设备或者 PSP 之类的连接它了,我的电脑也不能一天 24 小时的在家中开机,碰巧这两天买了连个树莓派,上面运行的是专门定制过的 Debian Linux,我就想着是否能够使用它来运行 Cow。十分不幸的是,似乎作者的网站上并没有提供 ARM 设备的 Cow 版本,我尝试的下载了 Linux 32 位的版本,但是无法在树莓派上运行。所幸 Cow 是用 Go 语言写的,而 Go 支持 ARM,大不了自己编译 Cow。 我不知道是因为我的的问题还是因为什么奇怪的问题,树莓派的官方源里有 Golang,但是我安装之后却无法使...阅读全文

博文 2017-02-09 13:31:05 venmos

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

golang LINUX集群控制(LINUX反弹式远控) LINUX反向链接运维

LINUX集群控制(LINUX反弹式远控) GET地址 https://github.com/webxscan/linux_rat zzkey.com BY:QQ:879301117 应用场景 因为工作需要,需要集群管理树莓派,而这些树莓派并没有外网IP所以无法使用SSH正向链接,所以必须采用反弹式链接。 我之前写过远控,就想到了使用反弹式链接。 使用WEBSOCKET 链接。 应为时间问题,写的比较简陋还望大家多多见谅。 感谢 苦咖啡(voilet119@163.com) 伙计技术帮助 客户端 网站使用的BEEGO 服务端 \src\Client\Client_run.go var Sx_url = "http://xxxxxxxxx.com/linux_ip.txt" //上线地址 不多...阅读全文

博文 2019-04-20 09:53:08 alalmn

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

所谓平衡二叉树,是指一 棵空树或它的左右两个子树的高度差的绝对值不超过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 波涛澎湃

IPFS官方周报第52期

星际文件系统 (IPFS) ( https://ipfs.io/ ) 是一种新的超媒体分布协议,通过内容和标识来寻址。IPFS 支持创建完全分布式的应用程序。它的目标是使网络更快、更安全、更开放。由于范围广大,本周刊旨在跟踪整个生态系统的开发。想参与其中?点击下面的一些链接,查看我们在 GitHub (https://github.com/ipfs) 上的内容,或加入我们的 IRC ( https://riot.im/app/#/room/#ipfs:matrix.org )。想要更新你的收件箱吗? 订阅我们的每周通讯! ( https://tinyletter.com/ipfsnewsletter )以下是自上次 IPFS 周刊以来的一些亮点。最新发布在树莓派上安装 IPFS 和 IPFS...阅读全文

博文 2019-10-15 12:32:57 aside section ._1OhGeD

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

菜菜的涨工资申请还在待审批中.... 作为一个技术人员,技术的问题还是要解决。经过线上日志的分析,日志采用小时机制,一个小时一个日志文件,同一个小时的日志文件有多个,也就是说同一时间内的日志有可能分散在多个日志文件中,这也是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

树莓派3B开发Go语言案例-3.PCF8591模数模块使用

title: 树莓派3B开发Go语言案例-3.PCF8591模数模块使用 tags: 树莓派,go,golang,3B,3B+,PCF8591 该案例主要实现模拟信号和数字信号的转换,通过调节PCF8591模块上的可调电阻,控制LED灯的亮度,该节涉及几个知识点:I2C、PCF8591,这里不做讲解,可以自行百度 PCF8591 接线操作,将PCF8591的SDA接到树莓派的第3个针脚,SCL接到树莓派的第5个针脚,AOUT接LED灯正极,可调电阻和AIN0针脚关联 代码如下,第一个文件是参考python的PCF8591驱动写的go版驱动 package pcf8591 import ( "periph.io/x/periph/conn" "periph.io/x/periph/conn/i...阅读全文

博文 2019-04-13 01:34:38 Gold_Z

面试经典算法:优先队列,最大堆,堆排序,左偏树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

树莓派3B开发Go语言案例-2.LED呼吸灯效果

title: 树莓派3B开发Go语言案例-2.LED呼吸灯效果 tags: 树莓派,go,golang,3B,3B+,rgb,led 原本想实现RGB LED灯发出多彩灯光效果,由于当前版本的PWM非常难用,且存在BUG,官方计划重构PWM的功能,所以改为了呼吸灯效果。 该功能主要是通过PWM调光来实现,关于PWM调光推荐一篇科普文章 PWM调光科普(上篇):人类显示器的黑历史 ,讲解的非常清楚。 LED正极接在针脚11上,对应GPIO17 实现代码,该节代码仅做参考,因为 package main import ( "log" "time" "periph.io/x/periph/conn/gpio" "periph.io/x/periph/conn/physic" "periph.io/...阅读全文

博文 2019-02-01 00:34:42 Gold_Z

[用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的二叉树,即一个节点的左右子树的高度不会超过一层,也称平衡二叉树。 树根据儿子节点的多寡,有二叉树,三叉树,四叉树等,我们这...阅读全文

树莓派3B开发Go语言案例-1.双色LED

title: 树莓派3B开发Go语言案例-双色LED tags: 树莓派,go,golang,3B,3B+,led 该案例实现红绿两色LED灯交叉闪烁,针脚及接线图如下 引脚图 实现代码 package main import ( "log" "time" "periph.io/x/periph/conn/gpio" "periph.io/x/periph/host" "periph.io/x/periph/host/rpi" ) func main() { // 加载所有驱动 if _, err := host.Init(); err != nil { log.Fatal(err) } ticker := time.NewTicker(500 * time.Millisecond) // ...阅读全文

博文 2019-01-29 00:34:43 Gold_Z

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 厚土火焰山

【派】0005-Go环境安装

【派】0005-Go环境安装 [TOC] 本文主要描述如何在树莓派3B上安装Go环境。 参考文章:(排名不分先后) https://www.jianshu.com/p/1f1e7fa6008b https://go-zh.org/doc/install#uninstall https://blog.csdn.net/caiqiiqi/article/details/73063903 https://www.golangtc.com/download 树莓派系统更新 首先更新树莓派相关的更新 sudo apt-get update sudo apt-get upgrade Go下载 在https://www.golangtc.com/download中,根据系统,获取对应的下载地址。 例如: ...阅读全文

博文 2018-11-05 18:34:45 孙朗斌

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 稻田夕阳

golang无限树分类

1. 数据库结构 图片.png 2.数据库结构体 type Menu struct { Id int64 //id SiteId int64 //站点id MenuName string //目录名称 PmenuId int64 //父级id MenuUrl string //链接地址 IconId string //目录图标 Sorts int64 //排序 Child []*Menu //多个子级目录 } 3.查询所有菜单函数 func GetMenu() []*Menu{ //定义指针切片用来存储所有菜单 var menus []*Menu //定义指针切片返回控制器 var res []*Menu //查询所有pmenu_id为0的数据,也就是一级菜单,site_id是站点,可以忽略...阅读全文

博文 2020-04-09 00:32:52 whyme_7ac2

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

二叉树的遍历,无论是在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中的struct

结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体,每个值称为结构体的成员。下面分两方面介绍:一个是基础部分,一个是看一下结构体在实际内存中的内存模型。 1 基础 1.1 定义 type structName typeName {} 1.2 声明 var varName structName 1.3 初始化 type Point struct{ X, Y int } p := Point{1, 2} anim := gif.GIF{LoopCount: nframes} 此创建方式结构体成员顺序不重要。 1.4 new new(structType) new出来的是结构体指针。 1.5 特性 结构体成员相同,顺序不同不是相同结构体类型。 结构体成员以大写字母可以导出,小写的不...阅读全文

博文 2019-07-02 18:32:57 XITEHIP

[用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

golang生成无限树

概要 定义无限结构体.使用指针方式 List []*TreeNode,见1处代码 构建parent_id为key的map结构. 构建树的结构. 源代码 package main import ( "encoding/json" "fmt" ) // 1处 type TreeNode struct { Id int `json:"id"` PID int `json:"pid"` Name string `json:"name"` List []*TreeNode `json:"list,omitempty"` // omitempty 表示如果空的话,则忽略. } func main() { test := `[{"id":1,"pid":0,"name":"a"},{"id":2,"pid...阅读全文

博文 2020-04-09 18:32:53 百里江山

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,...阅读全文

golang 系列教程(四)—— 高级数据结构

背景 golang 不像c++,已经有stl这种通用的高级数据结构。所以如果想要栈,队列,链表等数据结构需要自己实现。 下面介绍下常用的几种数据结构 链表 单链表是一种链式存取的数据结构,一个链表由一个或者多个节点组成,每个节点有一个指针指向下一个节点。 以下是一个节点为int的链表实现。 package list type List struct { Head * ListNode length int } type ListNode struct { Next *ListNode Data int } func (p *List) AddNode(data int) { if p.Head == nil { p.Head = new(ListNode) } var node = &Lis...阅读全文

博文 2019-08-18 00:04:24 叶不闻

二叉查找数 golang实现

首先定义数据结构,这个不用多说,这里添加了一个size,这样就可以在o(1)的时间复杂度内获取这个二叉树的大小。 image.png 首先要写的是添加节点(put)接口:通过和当前节点的key比较,如果相等就更新val,如果小于就遍历左节点,反之则遍历右节点。 image.png 如果没有找到就创建一个新节点: image.png 然后是 get接口,这个接口也比较简单,和put类似,左右遍历即可: image.png 个人认为二叉查找数最大的难点是删除一个树节点 有4种情况: 1,待删除节点的左右节点都为null,直接返回null 2,待删除节点的左节点为null,直接返回右节点 3,待删除节点的右节点为null,直接返回左节点 4,待删除节点的左右节点都不为null, 一种普遍的做法是用...阅读全文

博文 2018-10-18 00:34:44 Tibbersshao

根据输入构建完全二叉树, 并找出根到节点和为给定值的所有路径

package main import ( "fmt" "strings" "strconv" ) type Node struct { Data int Left *Node Right *Node High int } func main() { // 根据输入构建完全二叉树, 并找出根到节点和为给定值的所有路径 // 输入 // 22 // 10,5,12,4,7 // 输出 // 10,5,7 // 10,12 // // 使用栈对树进行深度优先遍历,利用树高更方便寻找判断路径 paths, err := findPath(22, "10,5,12,4,7") fmt.Println(paths, err) } // 查找路径 func findPath(sum int, nodeV...阅读全文

C++服务端面试准备(3)数据结构与算法相关

声明:本文内容纯属博主自己查找和归纳的个人所需的知识点,仅作参考,如有错误,博主强烈希望您指出。如果您是某个知识点的原创博主,如有需要,可联系本人加上链接。本文内容会根据博主所需进行更新,希望大家多多关照。 你所知道的数据结构 数组 (Array)、栈 (Stack)、队列 (Queue)、链表 (Linked List) 树: 堆(heap)、(B-树、B+树、)二叉查找树、AVL树、红黑树、二叉树、哈夫曼树 图 (Graph) 散列表 (Hash) 数组:有序的元素序列,固定大小 栈:是一种运算受限的线性表,先进后出 队列:一种操作受限制的线性表,先进先出 链表:非连续、非顺序的存储结构,逻辑顺序是通过链表中的指针实现的 1.头插法:新插入的数据的指针指向最后的数据 2.尾插法:最后的数...阅读全文

博文 2020-04-08 10:32:46 DX3906

Golang——运算符和格式化输出

运算符 算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其他运算符 算术运算符 + 相加 - 相减 * 相乘 / 相除 % 求余 ++ 自增 -- 自减 func main(){ a := 2 b := 7 fmt.Println(a + b) //9 fmt.Println(a - b) //-5 fmt.Println(a * b) //14 fmt.Println(a / b) //0 fmt.Println(a % b) //2 a ++ fmt.Println(a) //3 b -- fmt.Println(b) //6 } 注意:由于Go语言没有自动类型转换,因此运算必须是同一种类型,否则编译出错 invalid operation: a + b (mismatched...阅读全文

博文 2020-05-14 08:32:44 Cici冬雪