09 2020 档案
摘要:二叉搜索树(BST)的特点是左子树的结点小于根结点小于右子树的结点,并且对于所有的子树都满足这个条件。 二叉树的中序遍历就是先遍历左子树的结点,再遍历中间根节点,最后遍历右子树的结点 因此,如果一棵树是BST,那么他的中序遍历结果必定是一个升序的结果 所以检查一棵树是不是一棵BST,只需要看中序遍历
阅读全文
摘要:本题采用深度优先遍历 二叉树结构如下: type TreeNode struct { Val int Left *TreeNode Right *TreeNode } 我们的思路是对于求整棵树的深度,就是根节点的左子树的深度或者根结点的右子树的深度加1,那么,使用递归的方式就是 depth(root
阅读全文
摘要:1、概述 排序结点广播的信息包括更新的状态信息和账本信息,这些信息需要广播给所有结点,在fabric中实现这个广播功能的协议就是Gossip协议,当结点收到消息以后会以固定概率发送给周围的结点,在fabric中,当结点收到消息后会随机选择周围k个结点(默认是3个)进行转发消息,如果邻居结点小于k个,
阅读全文
摘要:判断一个链表中是否存在环,那么很明显的就是想到了快慢双指针的方式,快指针每次向后走两步,慢指针每次向后走一步,也就是说每次快指针比慢指针多走一步,那么如果链表中存在环,那么必定再某一次移动的时候快慢指针相遇,如果链表中不存在环,那么也就是快指针的下一步为nil。 我在golang中定义存在环的链表还
阅读全文
摘要:这道题的限制是时间复杂度是O(n),空间复杂度是O(1),所以我们不能使用常规的方法,常规的方法就是将链表中的数据保存在数组中,然后通过数组判断是否是回文数组,这自然很简单 所以在本题,我们采用的思路就是将链表的后面半部分反转,然后再比较前面半部分和后面半部分是否相同 首先我们需要找到后面半部分,采
阅读全文
摘要:使用迭代法 保存前一个结点,头结点的前一个结点为nil 保存后一个结点 将当前结点的下一个结点指向前一个结点 修改指针,将指向前一个结点的指针指向当前结点,将指向当前结点的指针指向后一个结点 nextNode=head.Next head.Next=pre pre=head head=nextNod
阅读全文
摘要:KMP算法 举例 假设我们有字符串: GTGTGAGCTGG 并且有模式串 GTGTGCF 算法解析 我们需要创建模式串的next,他表示当两个字符串进行模式匹配失败的时候,需要从模式串的哪一个位置重新开始匹配 例如上面两个字符串 012345678910 G T G T G A G C T G G
阅读全文
摘要:b, ok := rd.(*Reader) 上面的语句的作用是判断接口的动态类型是不是*Reader类型,如果是,那么ok的值为true,这种动态类型的判断方法必须rd的类型为一个接口 结构体Reader的初始化 type Reader struct { buf []byte rd io.Reade
阅读全文
摘要:直接上一段代码,这是从go语言源码中提取出来的: func main() { // 这个表达式可以得到最大的正的int类型的值 a := int(^uint(0) >> 1) fmt.Println(a)//9223372036854775807 b := uint(0) // 无符号0 fmt.P
阅读全文
摘要:解析 最简单的方法是将矩阵先转置,然后翻转每一行元素,就得到旋转90°的矩阵了 我用的另一种思路,就是真的旋转 例如如下矩阵 然后先旋转最外层: 然后再旋转内层 也就是每个元素挪动到它最终的位置上,并用临时变量存储被占用位置的元素,每一次需要挪动元素个数4个 最外层的循环是从1 2 3这三个元素开始
阅读全文
摘要:解析 对于9*9的数独,我们按照行9个,列9个和3*3的子数独9个,因此一共有27个子数独,我们只需要判断这27个子数独中是否存在重复元素就解决了这一道题 行号0-8,列号0-8,我们按照从左到右从上到下,将3*3的子数独编号 012 3 4 5 6 7 8 那么我们按照行号和列号获取子数独编号的公
阅读全文
摘要:解析 我觉得我们需要考虑两种情况: 数组中不存在重复元素 数组中存在重复元素 当数组中存在重复元素,并且target刚好是这两个元素的和,那么我们的返回结果应该是两个相同元素的下标,甚至如果这样相同的元素有很多个,那么我只需要返回前两个相同的元素就可以了。 本题使用哈希来实现,定义哈希为map[in
阅读全文
摘要:解析 将数组中的0元素移动到最后,而其他元素的顺序保持不变,所以我们考虑双指针的做法 第一个指针用于遍历整个数组,如果这个指针遍历到的数组元素不等于0,那么就将这个值存到第二个指针指向的位置,然后将第二个指针向后移动一个位置 最后将第二个指针后面的数组位置全部补上0就可以了 算法 定义指针index
阅读全文
摘要:算法 设置一个进位值carry,初始carry的值为1,从数组的最后开始向前遍历遍历 数组当前遍历到的元素加carry,新的carry是这个和除以10,数组当前位置新的值是这个和对10求余 遍历完整个数组以后: 如果carry等于1,那么就在数组的最前面加一个元素1 如果carry不等于1,那么就直
阅读全文
摘要:解析 数组中元素是可以重复的 如果重复的元素是交集中的元素,那么在交集中要有这些元素 算法 创建一个map[int]int 遍历数组1中所有的元素,将他们存在上面的map中,map的键就是元素的值,map的值就是该元素出现的次数 遍历第二个数组的元素,如果该元素在map中的值大于1,就将这个元素存入
阅读全文
摘要:先决知识 异或操作符^ 关于异或运算: 我们需要知道的是任意两个相同的数进行异或运算结果为0 0与任意数字异或运算结果还是该数字本身 算法 将数组中所有元素进行异或运算,由于之前所有元素都成对出现,所以那些元素异或结果为0,这个0与那个单独的元素异或运算,结果就是只出现一次的那个元素 代码如下: f
阅读全文
摘要:本题的目的是判断数组中是否存在重复元素,那么直接使用map[int]bool就可以实现目的 代码如下: func containsDuplicate(nums []int) bool { elemMap := make(map[int]bool) for _, value := range nums
阅读全文
摘要:题目描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转
阅读全文
摘要:1、系统的逻辑架构 应用程序角度 身份管理 账本管理 交易管理 只能合约 底层角度 成员管理 MSP 共识服务 同一条链上不同结点的区块的一致性,同时确保区块里面的交易有效和有序 链码服务 安全和密码服务 2、网络结点架构 结点分类 客户端、Peer结点、排序服务结点、CA结点 结点描述 客户端结点
阅读全文
摘要:题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [7,1,5,3,6,4]输出: 7解释:
阅读全文
摘要:我第一次的思路是; 遍历排序数组,如果当前遍历到的值和前一个值相等,那么就用 // i是当前遍历到数组的位置 nums = append(nums[:i], nums[i+1:]...) 使用append去掉切片中的元素,代码如下: func removeDuplicates(nums []int)
阅读全文
摘要:这道题很简单,只需要从头开始遍历两个链表,每次将两个链表的当前元素比较,值较小的结点就存入到新的链表 需要注意的是加入新表是l3,旧表是l1,l2,那么将旧的表结点插入新的表的时候需要如下方式 l3.Next=l1 l3=l3.Next 而不能是 l3=l1 l3=l3.Next 这两种方式的区别是
阅读全文
摘要:本题采用了栈的思想 在Go语言中使用栈是一件非常方便的事情,只需要使用切片就可以了 本题的思路将从括号字符串中读取到的字符进行出入栈操作 如果是左括号“(、[、{”,就直接入栈 如果是右括号,首先判断栈是否非空 如果是空的,那么栈中没有左括号与当前遍历到的右括号匹配,就返回错误 如果不是空的,那么就
阅读全文
摘要:首先链表是单链表: type ListNode struct { Val int Next *ListNode } 那么假如我们又链表1->2->3->4->5 我们需要分如下两种情况讨论 1、删除的链表结点时头结点,也就是是说N的值是链表的长度: 此时直接将头结点指向他的下一个结点 2、删除的是中
阅读全文
摘要:四数之和其实和三数之和完全一样: 我们可以这样考虑,他们的和减去其中一个数,是不是就变成了新的三数之和,那么接下来就按照处理三数之和的方式去处理,处理过程完全一样 参照前面的三数之和的博文 代码如下: func fourSum(nums []int, target int) [][]int { va
阅读全文
摘要:本题主要是用回溯的思想,采用的实现方法是递归 '2': "abc", '3': "def", '4': "ghi", 例如数字串234,那么计算他们的组合方式如下 1、获取数字2对应的字符串abc 1.1、读取第一个字符a,将他存入结果elem,此时elem的值就是a 2、获取数字3对应的字符串de
阅读全文
摘要:思路和第15题三数之和一样,只不过将15题的和0改成了这道题的target. 代码如下: func threeSumClosest(nums []int, target int) int { min := math.MaxInt32 sum := 0 sort.Ints(nums) for i :=
阅读全文
摘要:环境win10+git bash cd $GOPATH/src mkdir acroca cweill derekparker go-delve josharian karrick mdempsky pkg ramya-rao-a rogpeppe sqs uudashr cd acroca git
阅读全文
摘要:题目的要求有两个,首先是三个数的和为0,其次是这种和为0的三元组不能重复。 当给定一个数组,我们求满足和为0的三元组的时候核心思想使用的是暴力破解,也就是三重循环,遍历三次数组,但是在这里我们给出如下优化: 首先将数组按照从小到大的顺序排序 设置三个指针index,分别为i,j,k,他们分别代表数组
阅读全文
摘要:func longestCommonPrefix(strs []string) string { longestStr := make([]byte, 0, 0) index := 0 // 直接过滤边界条件[] if len(strs) == 0 { return string(longestSt
阅读全文
摘要:当main包中有多个go文件时; package main: main.go aa.go bb.go 此时main包中包含了三个go文件:main.go,aa.go,bb.go,其中mian.go文件中有main函数(必须有main函数,但是main函数不一定必须在main.go文件中) 此时有两种
阅读全文
浙公网安备 33010602011771号