
go
文章平均质量分 67
zyj0813
golang、Linux、区块链
展开
-
求两个数额最大公约数的几种方法并对其优化
package mainimport "fmt"/* 使用辗转相除法求两个数的最大公约数。 思路:辗转相除法原理为 a 和 b的最大公约数等于 b 和 a%b的最大公约数 (a > b) , 依次类推把求a b 的最大公约数换算成较小的值来求*/func getGreatestCommonDivisorV1(a, b int) int { // 首先要保证 a &g...原创 2019-11-30 22:19:55 · 375 阅读 · 1 评论 -
判断一个单向链表中是否存在环
package mainimport "fmt"/* 题目: 判断一个单向链表中是否存在环 最优解思路:1. 使用两个指针,起点都从链表的头结点开始,第一个指针每一步走一个节点,第二个指针每一步走两个节点,如果存在环两个指针一定会相遇的。这类似于小学中学的追击问题:在一个环形跑道上两个运动员同一地点出发一个运动员速度快另一个速度慢,两个运动员一定会相遇。*/// 假设链表节点...原创 2019-11-30 22:10:06 · 841 阅读 · 0 评论 -
巧妙判断一个数是否为2的整数次幂
package mainimport "fmt"/* 如何判断一个数是否为2的整数次幂 思路1. 暴力破解:从1开始乘以2,循环并和目标值比较,当大约目标值则终止,显然此方法效率非常低下 思路2. 把乘以2改为移位运算,提高一点效率,还是没有解决算法的根本问题 思路3. 通过转换成二进制观察,为2的整数次幂的数字转换成2进制都是首位为1其他位都为0的数字,比如10,100,100...原创 2019-11-30 22:00:23 · 437 阅读 · 0 评论 -
求两个有序数组的中位数
要求: 给定两个大小为 m 和 n 的有序数组nums1 和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。例如:nums1 = [1, 3]nums2 = [2]则中位数是 2.0nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5算法解析:中位数:将一个集合划分为两...原创 2019-11-30 21:39:56 · 340 阅读 · 0 评论 -
golang环形链表实现约瑟夫问题
约瑟夫问题:是一个出现在计算机科学和数学中的问题,在计算机编程算法中类似问题又称为约瑟夫环或者叫做“丢手帕问题”。约瑟夫问题的原理:n个人围成一圈,选择一个人开始报数,每过m次则当前报数的人则会被踢出圈,然后挨着的下一个人作为又一轮游戏的第一个报数的人,这样重复最后只会剩下一个人。例如: n = 6, m = 5,陆续被踢出圈的人的编号为:5,4,6,2,3,1.代码实现如下:...原创 2019-11-30 16:51:16 · 601 阅读 · 0 评论 -
给定一个字符串,请找出其中不含有重复字符的最长子串
package mainimport "fmt"/**给定一个字符串,请找出其中不含有重复字符的最长子串eg: 输入: "abcacabb" 输出: "abc"*/func getLongestString(ss string) string { storeMap := make(map[int]string) // key为保存的字符转最后一个字符在整个字符串中的index,...原创 2019-11-30 15:54:46 · 366 阅读 · 0 评论 -
三个水壶算法实现
三个水壶算法: 三个水壶的容积分别为8升,5升,3升,最开始第一个水壶装满了8升的水,每次倒水都只能倒满或者是倒空这两种情况,求出三个水壶中装有4升水的最优倒水。package mainimport "fmt"/** 三个水壶算法三个水壶的容积分别为8升,5升,3升最开始第一个水壶装满了8升的水每次倒水都只能倒满或者是倒空这两种情况求出三个水壶中装有4升水的最优倒水*/...原创 2019-11-30 14:50:35 · 1883 阅读 · 0 评论 -
golang重写区块链——0.2 加入工作量证明pow
比特币使用的共识机制为工作量证明机制,此机制已经经历了数十年的验证了,虽然原理简单粗暴,但是不得不承认它的安全性与可靠性。下面将实现的是区块链中的pow机制:pow包package powimport ( "fmt" "crypto/sha256" "strconv" "bytes" "math/big" "go_code/A_golang_blockchain/...原创 2018-08-25 17:02:22 · 775 阅读 · 0 评论 -
golang重写区块链——0.6 UTXO集和Merkle树的实现(优化链上交易)
到目前为止,我们已经基本实现了区块链中的所有元素。在第一章节就讲到区块链是一个分布式数据库,这也是去中心化的核心所在,但是在前面的章节我们在实现区块链中的各种功能的过程中我们并没有去考虑‘分布式’的问题,只是关注了数据库这部分的实现。在这一章节中我们来讨论区块链的分布式的实现。 本章之后的全部代码已经上传到github上面了,可以点击 这里 查看。在开始之前我们先总结一下我们...原创 2018-08-28 23:16:45 · 2175 阅读 · 2 评论 -
golang重写区块链——0.5 区块链中钱包、地址和签名的实现
在上一章节中,我们把简单的用户定义的字节当做地址来使用,比如在上一 章我测试用到的zyj和dxn。在这一章节中我们要正真的去实现区块链中的地址。 大家应该还记得上一章中提到过区块链中的交易是地址与地址之间的,地址的背后才是我们人来操作,因此我们会发现一个问题,就是在上一章中的这些我们自定义的地址并没有什么意义,因为随便谁都可以使用,转移该地址中的getbalnace,但是现实中我们并不想...原创 2018-08-27 20:15:44 · 3212 阅读 · 2 评论 -
golang重写区块链——0.4 链上交易(无地址版本)
区块链的作用就是要实现交易,一种无法篡改永久保存的交易。比特币区块链还没有像以太坊一样已经实现了账户的概念,比特币区块链上的交易双方是地址,地址背后才是人,人和地址不是一一对应的关系,一个人可以拥有很多比特币的地址。 ——注:底端有完整的代码,代码里面有详细的注解,可以直接看完整的代码,github端我随后会上传 在一笔交易中,是由输入和输出来形成的,首先我们重新创...原创 2018-08-26 15:24:23 · 1379 阅读 · 0 评论 -
golang重写区块链——0.1 实现简单的链
众所周知go语言的天生的高并发性具有适合区块链技术的天然优势。起初的以太坊的底层代码所用的语言C++,java,ruby等有很多种,最终官方还是考虑使用go 语言的版本作为官方版本。可见go语言在区块链底层开发中是具有很大的优势的,也是从事区块链行业的人员必须掌握的一门编程语言。下面我通过go语言编写了一个简单的BlockChain,让大家能简单理解区块链的构成原理。1、区块包...原创 2018-07-23 20:27:28 · 1734 阅读 · 0 评论