米兰的小铁匠1943的博客

世界上只有一种英雄主义,那就是在认清生活真相之后依然热爱生活

go语言实现--从两个数组中找出它们的和最接近给定值的一对或多对元素

问题描述: 有两个数组,分别从两个数组取一个元素组成一对,找出使它们的和最接近给定值的一对或多对元素 解决方法: 借助散列表,实现空间换时间提高查找效率,下面的时间复杂度和空间复杂度都是O(N) package main import "fmt" //它们的和等于给定值的一...

2019-04-23 15:39:08

阅读数 27

评论数 0

go语言实现--单链表

近来为了面试,复习了一下程杰老师写的《大话数据结构》,书里是代码是C语言写的,我用golang把它们重新实现一遍以及做一点变动。 顺序表与链表是非常基本的数据结构,它们可以被统称为线性表。 线性表是由 n(n≥0)个数据元素(结点)a[0],a[1],a[2]…,a[n-1] 组成的有限序列。...

2019-03-11 00:27:00

阅读数 572

评论数 0

go语言实现--二叉树

二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^...

2019-03-10 23:39:10

阅读数 1416

评论数 2

Go知识点整理(不定期更新)

1.在 Go 中恰到好处的内存对齐 2.Golang - 调度剖析一 3.Golang - 调度剖析二 4.Golang - 调度剖析三

2019-01-22 22:34:14

阅读数 47

评论数 0

Linux下搭建Golang开发环境

gvm是golang的版本管理工具,用它来安装golang的话十分方便,可以切换golang版本,GitHub地址:https://github.com/moovweb/gvm 里面有安装教程,不过我写的这篇稍微有点不同,你们可以先阅读一遍,知道一下意思。 第一步:安装依赖 如果是Debian...

2018-06-02 09:43:12

阅读数 788

评论数 0

go语言实现--双向循环链表

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。 代码如下: package doubleLinkedList import ( ...

2018-05-27 13:08:10

阅读数 234

评论数 0

go语言实现--找出一个数组中的两个数,这两个数之和等于一个给定的值

面试的时候曾经问了我一道算法题,题目是 :快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值 所以把它记录下来 解法一:穷举,从数组中任意取出两个数字,计算两者之和是否为给定的数字,时间复杂度O(N^2) 解法二:hash表。因为给定一个数字,根据hash表映射查找另一个数字是否...

2018-05-22 18:00:03

阅读数 722

评论数 0

go语言实现--斐波那契数列的3种方法

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定...

2018-05-21 21:14:16

阅读数 366

评论数 0

go语言实现--二分查找算法

二分查找是logN级别的查找算法,前提是有序序列并且存储在顺序表中,如果是存储方式是链表则不能使用。 二分查找的核心思想理解起来非常简单,有点类似分治思想。即每次都通过跟区间中的中间元素对比,将待查找的区间缩小为一半,直到找到要查找的元素,或者区间被缩小为 0。但是二分查找的代码实现比较容易写错...

2018-05-21 20:03:19

阅读数 609

评论数 0

go语言实现--常用的排序算法

以前用过c和php实现过一些常用的排序算法,现在用golang把它们再实现一遍 1.冒泡排序 冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。时间复杂度为O(n2) 代码如下: package main ...

2018-05-21 15:52:10

阅读数 538

评论数 0

TCP四次挥手时的TIME_WAIT状态

这几天面试遇到一个问题是关于TCP四次挥手的时候,先发起方为什么会有一个TIME_WAIT状态,它的作用是什么? 然后整理了一些资料和自己的一些总结,方便日后查阅。 先上图   注: MSL(最大报文段生存时间),网络中的TCP的报文段经过此时间会消失,旧tcp连接的报文段消失了就不...

2018-05-20 01:13:49

阅读数 627

评论数 0

进程地址空间与虚拟存储空间的理解(转载)

早期的内存分配机制 在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。 那当程序同时运行多个程序时,操作系统是...

2018-05-18 19:24:32

阅读数 768

评论数 0

Golang 新手可能会踩的 50 个坑

转自:https://segmentfault.com/a/1190000013739000前言Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷。如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到。如果花时间学习官方 doc、w...

2018-05-06 14:20:50

阅读数 953

评论数 0

简述 OAuth 2.0 的运作流程

转自:https://www.barretlee.com/blog/2016/01/10/oauth2-introduce/本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程。假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网...

2018-05-06 14:15:28

阅读数 35

评论数 0

MySQL索引背后的数据结构及算法原理

转自:http://blog.codinglabs.org/articles/theory-of-mysql-index.html摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL...

2018-05-06 14:12:59

阅读数 101

评论数 0

go语言实现--广度优先搜索迷宫

迷宫大致如下: 左上角和右下角的点分别为起点和终点,灰色的点代表墙,走不通,白色的点可以走通,我们要做的是从起点走到终点,我们每到一个点便从上左下右四个方向探索它周围的四个点,如果是走过的点我们不要探索,计算出它的步数,用的广度优先算法。 第一步:把起点(0,0)入队列,每次探索一个点,便...

2018-05-02 08:34:29

阅读数 652

评论数 3

MySQL优化原理分析

转自:http://www.cnblogs.com/zhangyinhua/p/7620964.html#_label8前言说起MySQL的查询优化,相信大家收藏了一堆:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否...

2018-04-27 09:58:29

阅读数 73

评论数 0

go语言实现--寻找最长不含有重复字符的子串

这道题是LeetCode里面的一道题,用golang去实现,思路如下:代码如下:package main import ( "fmt" ) func lengthOfNonRepeatingSubStr(s string) int { lastOccur...

2018-04-26 21:09:17

阅读数 880

评论数 0

《go语言圣经》笔记之--并发非阻塞缓存

根据书本第9章第7节的内容,实现一个并发非阻塞缓存第一种方式,采用上锁的方式:package main import ( "fmt" "io/ioutil" "log" &...

2018-04-25 21:32:56

阅读数 33

评论数 0

《go语言圣经》笔记之--防止数据竞争的三种方式

第一种方法是不要去写变量如果我们在创建goroutine之前的初始化阶段,就初始化了package级别变量并且再也不去修改它们,那么任意数量的goroutine并发访问I这个package级别变量都是安全的,因为每一个goroutine都只是去读取而已。实例代码如下:var icons = map...

2018-04-23 16:22:17

阅读数 239

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭