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

最头疼的十大语言,C++居然第二,它竟是第一名!

编程语言是开发者们代码工作的核心,也是许多开发者最爱讨论的话题。编程语言的选择对开发者和工具制造商都十分重要,前者需要保持最新和具备市场潜力的技能,后者则亟需确保他们能够提供最有用的 SDK。开发者经济分析公司 SlashData 曾发布了《 2018 年第 2 季度各国开发者状况》调查报告,共有 167 个国家的 20500 多名开发者参与其中。报告面向全球所有类型的程序员,对使用每种主要编程语言的活跃开发者数量进行了最新的估计。其中,JavaScript 仍是最流行的编程语言,Python 流行程度接近 Java。 哪种语言最难学呢?每个人也许都有着自己的想法,衡量标准各不相同。现在我们从一个全新的,无可反驳的角度来分析一下各个编程语言难学程度。第十名、R语言颁奖词R语言,一种自由软件编...阅读全文

博文 2019-07-26 01:32:45 伟哥程序员

go中的array

今天来说一下go里面的array。要对go中的array进行了解,就需要知道go中的另外一个概念slice,而要知道slice你又要知道new和make的区别,而要知道new和make的区别你又得了解value,pointer,reference的区别。下面我们来逐一看一下这些概念。 1、value, pointer以及reference 这些概念其实与其他语言是一样的,但是我们在这里单独提出来说这个是因为在go语言里都是使用value的,因此如果将一个array赋值给另外一个array,必然会涉及到值拷贝,比如 a := [9]int{0,1,2,3,4,5,6,7,8} b := a,那么这里b就拷贝到了a的值。而相反,对于pointer和reference而言则不会有这样的拷贝 2、n...阅读全文

博文 2014-10-06 09:44:32 HopingWhite

第一次来博客园,来两个排序算法热热身(golang冒泡排序和快速排序)

第一次来到博客园,属于比较晚了,毕业前后从事开发已有4年,学到了一些东西,但是发现需要学的东西更多了。先来两个基础的排序算法热热身 一.冒泡排序,向后移动,从小到大排序,其思想为相邻两个数进行比较,将较大的滞后,时间复杂度O(N^2) package main import ( "fmt" ) func main() { array := [11]int{56,45,9,16,2,89,78,34,102,56,99} fmt.Print("排序前:") fmt.Println(array) length := len(array) for i := 0; i < length; i++ { for j := 0; j < length-1-i; j++ { if array[j] > ar...阅读全文

博文 2016-05-11 11:00:01 robotcoming

hdu 5193 Go to movies Ⅱ 块状链表 + 树状数组

数组的定位o(1),插入o(n). 链表的定位o(n),插入o(1). 所以把二者结合,是复杂度均摊为 sqrt(n) 设每块的大小为S,那么删除或者添加元素时,维护逆序对数的复杂度是O(S+\frac{P}{S}* \log n)o(S+(p/s)*logn),S是块内直接暴力更新逆序对的代价,(n/s)∗logn在前面块找比它大和在后面块中找比它小的代价,P表示当前元素的个数。为了使这两部分复杂度尽量均摊让S=\frac{P}{S}* \log nS=(p/s)*logn,S取sqrt(p*logn)。直接通过分块暴力添加和删除时,块的大小会退化,。。。。。(注:原官方题解说重构,不太清楚怎么叫重构。这里为了防止退化,在每个块元素过多时采取分裂操作)。因此整个问题的复杂度为O(m\sqr...阅读全文

博文 2016-07-07 16:00:05 Techmonster

重温一遍数据结构之线性表(golang版)

目的 因为最近工作中碰到了一些关于数据结构的问题,发现有些生疏了,所以想重新自己再理一遍,就当是给自己的记录,之所以用golang主要也是因为对goalng比较感兴趣,写起来也比较顺手。本意也不是想分享关于什么是数据结构,因为这种概念性的东西没有什么太大意义,其实最重要的是让自己能看懂自己写了些什么,但是代码中写了非常详细的注释,所以基本都是以代码为主 线性表之顺序存储结构 以下代码是线性表中的顺序存储结构,基本略去了些容错的考虑,还是以实现功能为主 package main //线性表中的顺序存储结构 import ( "fmt" ) // 线性表中存储的数据类型 type Elem int type SqList struct { //最大长度 maxsize int // 当前长度 l...阅读全文

博文 2017-11-19 15:05:03 woshicixide

leetcode--两数之和(1)

1.给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1] go实现: package main import ( "fmt" ) func main() { nums := []int{1, 3, 4, 6, 7, 10} target := 17 newArr := twoSum(nums, target) fmt.Println(newArr) } func twoSum(nums []int, target int) []int { maps :=...阅读全文

博文 2018-05-09 21:34:37 fighter

[golang] 数据结构-二分插入排序

接上文 直接插入排序直接插入排序每轮比较中,都需要把待处理的元素与前面每一位元素进行比较。那么有没有一种方法可以优化下,减少比较次数呢?答案当然是有的,下面介绍的二分插入就是直接插入排序的优化算法之一。 原理直接插入排序是挨个的去比较,而二分插入排序则是利用二分搜索的原理,将待排序的元素与左侧已经排好序的队列的中间元素(n/2)进行比较。较小时则继续与中间元素左侧队列中间元素进行比较,较大则与中间元素右侧队列的中间元素进行比较,直至找到合适的位置,再讲这个位置后续的元素向后移动一位,带插入的元素放到这个合适的位置,从而完成一轮排序。 复杂度平均时间复杂度为O(n^2),空间复杂度始终为1。最佳情况时,仅需进行n-1次比较,无需交换。因为不会相同数值元素的先后顺序,所以它也是一种稳定排序。 代...阅读全文

博文 2018-07-26 05:35:50 NicoChen

GO语言 代码的嵌套——各种状态的组合

创翻译文章,转载请注明出处:服务器非业余研究-sunface 对于代码风格的争议由来已久:程序员在一段代码中到底该使用多少嵌套或者缩进结构。请先看看下面两个例子: 在第一个例子中,如果我们想在高亮代码附近进行debug,那么我们需要记住哪些呢? func (g *Gopher) WriteTo(w io.Writer) (size int64, err error) { err = binary.Write(w, binary.LittleEndian, int32(len(g.Name))) if err == nil { size += 4 var n int n, err = w.Write([]byte(g.Name)) size += int64(n) if err == nil ...阅读全文

博文 2015-06-17 23:03:18 abv123456789

最难学的十大编程语言,Java排第三,它竟是第一名!

编程语言是开发者们代码工作的核心,也是许多开发者最爱讨论的话题。编程语言的选择对开发者和工具制造商都十分重要,前者需要保持最新和具备市场潜力的技能,后者则亟需确保他们能够提供最有用的 SDK。 开发者经济分析公司 SlashData 曾发布了《 2018 年第 2 季度各国开发者状况》调查报告,共有 167 个国家的 20500 多名开发者参与其中。 报告面向全球所有类型的程序员,对使用每种主要编程语言的活跃开发者数量进行了最新的估计。其中,JavaScript 仍是最流行的编程语言,Python 流行程度接近 Java。 image 哪种语言最难学呢?每个人也许都有着自己的想法,衡量标准各不相同。 现在我们从一个全新的,无可反驳的角度来分析一下各个编程语言难学程度。 第十名、R语言 颁奖词...阅读全文

博文 2019-03-14 15:34:49 Camel_Java成长记

剑指 offer 数组中重复的数字

算法名称:数组中重复的数字 题目内容: 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 解题思路: (1) 一个简单的思路是先将数组排序,然后从头开始寻找重复数字。排序的时间复杂度为O(nlogn); (2) 利用hash表存储元素,若表中存在元素则找到重复数字。Hash查询时间仅用O(1),算法时间复杂度为O(n),但是需要一个哈希表,空间复杂度为O(n); (3) 利用元素数字都在0到n-1的范围内的特点,若不存在重复数字,则排序后的数字就在与其相同的索引值的位置,即数字i在第i个位置。遍历的过程中寻找位置和元素不相同的值,并进行交换排序。时间复杂度O(n),空间复杂...阅读全文

博文 2020-06-08 01:33:15 快乐的工程师

还好还好哈家

最难学的十大编程语言,Java排第三,它竟是第一名!编程语言是开发者们代码工作的核心,也是许多开发者最爱讨论的话题。编程语言的选择对开发者和工具制造商都十分重要,前者需要保持最新和具备市场潜力的技能,后者则亟需确保他们能够提供最有用的 SDK。开发者经济分析公司 SlashData 曾发布了《 2018 年第 2 季度各国开发者状况》调查报告,共有 167 个国家的 20500 多名开发者参与其中。报告面向全球所有类型的程序员,对使用每种主要编程语言的活跃开发者数量进行了最新的估计。其中,JavaScript 仍是最流行的编程语言,Python 流行程度接近 Java。image哪种语言最难学呢?每个人也许都有着自己的想法,衡量标准各不相同。现在我们从一个全新的,无可反驳的角度来分析一下各个...阅读全文

博文 2019-05-20 18:34:42 err0r_4671

golang语法总结(十五):数组array与切片slice

数组 数组定义格式示例: var a [2]intfmt.Println(a)b := [2]int{2,3}fmt.Println(b) 输出: [0 0] [2 3] 还可以省略数组长度,编译器自动推算: a := [...]int{5,6,7,8} 还可以使用索引初始化: a := [...]int{9:1}fmt.Println(a) 输出: [0 0 0 0 0 0 0 0 0 1] 需要注意的是,数组长度也是数组类型的一部分,因此长度不同的数组类型也就不同 数组在Go中为值类型,即给传递数组变量的时候是全复制,如果想传递引用,将使用Go特有类型:slice,后面会讲到 数组可以用==或!=来比较 可以使用new创建数组,此时返回的是数组指针: a := new([10]int) ...阅读全文

博文 2016-03-02 18:00:02 QQ245671051

[golang] 数据结构-直接插入排序

理直接插入排序,也是一种非常简单的排序算法。第一轮先从第二个元素开始,和第一个比较,如果较小就交换位置,本轮结束。第二轮从第三个元素开始,先与第二个比较,如果较小就与第二个交换,交换后再于第一个比较。如此循环直至最后一个元素完成比较逻辑。 复杂度最好的情况下,直接插入排序只需进行n-1次比较,0次的交换。平均下来时间复杂度为 O(n^2)。由于是每个元素逐个与有序的队列进行比较,所以不会出现相同数值的元素在排序完成后交换位置。所以直接插入排序是种稳定的排序算法。 代码 package main import ( "fmt" "math/rand" ) func main() { var length = 10 var tree []int for i := 0; i < length; i+...阅读全文

博文 2018-07-21 23:35:45 NicoChen

剑指offer-开启美(刷)好(题)生活:第一题,找出数组中重复的数字

## **本文结构** --- ### **1. 题库链接** ### **2. 题目名称 ** ### **3. 题目描述** ### **4. 解题思路** ### **5. 解法代码** ### **6. 解法分析** --- ### 1. 题库链接 https://www.acwing.com/problem/,搜索“剑指offer”。 --- ### 2. 题目名称 找出数组中重复的数字。 --- ### 3. 题目描述 给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 **注意:如果某些数字不在 0∼n−1的范围内,或数组中不包含重复数...阅读全文

博文 2019-06-05 23:29:08 GabrielJiang-J

敏感词过滤算法

前言 在游戏设计中一个最基本的功能就是处理屏蔽字、敏感字,至于为什么这个需求这么重要?你懂的。在网上搜了很多资料,发现主要有三种实现方式: 对于输入的一句话message, 1、循环使用所有的屏蔽词去message中查找,看是否存在,如果存在则判定为敏感词。 优点:简单,只要学过几个月编程的都会; 缺点:效率太低,而且效果不是太好; 2、将有共同起始内容的屏蔽词分为一组,然后再使用方式1。 优点:比方案1效率高一些; 缺点:效率仍然很低,而且效果太差; 3、使用DFA算法。 优点:效率高,内存消耗低; 缺点:与前两者相比,实现复杂。 综上:为了应对越来越多的敏感词,寻找一个高效率的敏感词过滤算法就摆在了各个程序员的面前。而DFA是所有方法里面效率最高的。 在网上看了很多现有的实现方式,觉得存...阅读全文

最难学的十大编程语言,C++排第二,它竟是第一名!

编程语言是开发者们代码工作的核心,也是许多开发者最爱讨论的话题。编程语言的选择对开发者和工具制造商都十分重要,前者需要保持最新和具备市场潜力的技能,后者则亟需确保他们能够提供最有用的 SDK。开发者经济分析公司 SlashData 曾发布了《 2018 年第 2 季度各国开发者状况》调查报告,共有 167 个国家的 20500 多名开发者参与其中。报告面向全球所有类型的程序员,对使用每种主要编程语言的活跃开发者数量进行了最新的估计。其中,JavaScript 仍是最流行的编程语言,Python 流行程度接近 Java。 哪种语言最难学呢?每个人也许都有着自己的想法,衡量标准各不相同。现在我们从一个全新的,无可反驳的角度来分析一下各个编程语言难学程度。第十名、R语言颁奖词R语言,一种自由软件编...阅读全文

博文 2019-03-08 01:34:40 学习编程__

[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

golang 正则正则表达式反向查询

golang 正则正则表达式反向查询 基本上所有的语言都有正则表达式,golang也不例外。golang原生使用regexp包进行正则表达式的匹配。正常情况下满足基础的查询功能。但是,golang为了正则表达式的效率一直坚持O(n)的搜索复杂度,所以有些高级特性将无法满足。 反向查询 (\d)(\d)(\d)\d*\3\2\1 # 1235321 正则表达式可以通过\1的形式反向查询之前匹配的数据,但是原生自带的regxp是不支持该特性。所以只能使用第三方库来支持。 import regexp "github.com/dlclark/regexp2" re, _ := regexp.Compile(`(\d)(\d)(\d)\d*\3\2\1\d*`, 1) matched, _ := re...阅读全文

博文 2019-03-13 08:34:41 小嘛儿小二郎

Go 和 PHP 根据目标值计算两数之和

文链接:go letcode,作者:三斤和他的喵 php 代码个人原创 两数之和(Two Sum) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。示例: 给定 nums = [2, 7, 11, 15],target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]来源:力扣 简单来说就是给定一个数组,让你找到和为 target 的两个元素的索引。 解题思路 主要有 两种解题思路 : 暴力解法:两层循环,外部循环的当前值与target的差值为内层循环需要定位的值。时间复杂度O(n^2),空间复杂度O(1)。 优雅解法:一层循环,引入map,循环的当前值与target的差值...阅读全文

博文 2020-04-16 11:33:04 hxd_

Go语言字节序列、数字与字符串及其之间的互相转换

#Go语言字节序列、数字与字符串及其之间的互相转换 int int64 uint uint64 float64 string []byte之间的转换 --- ## 1 strconv包 实现了字符串和基本数据类型之间的转换。 ### 1.1 int和string转换 ``` i, err := strconv.Atoi("-42") //string->int s := strconv.Itoa(-82) //int->string fmt.Println("int<-->string:", i, err, s) -------------------------------------- int<-->string: -42 -82 ``` ### 1.2 字符串转为数字 ``...阅读全文

博文 2018-11-24 19:32:39 weiwg521

2019-08-12【LeekCode题库problem-15】

GitHub 地址:coffeeTu-code LeekCode 地址:题库 Language:Golang /* @题目 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 @示例: 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] @题目大意 给定一个数组,要求在这个数组中找出 3 个数之和为 0 的所有组合。 @解题思路 用 map 提前计算好任意 2 个数字之和,保存起来,可以将时间复杂度降到 O(n^2)。这一题比较麻烦的一点...阅读全文

博文 2019-08-13 01:32:45 CoffeeRabbit

解决连通性问题的四种算法

最近做 B 站弹幕分析 的项目,学习 Jieba 中文分词的动态规划算法,发现自己的算法知识待系统的学习,遂读 Sedgewick 的《算法 C 实现第三版》,这一系列算法的代码放在 Github,文章会同步到 SF,随意转载。 连通性问题 问题概述 先来看一张图: 在这个彼此连接和断开的点网络中,我们可以找到一条 p 点到 q 点的路径。在计算机网络中判断两台主机是否连通、在社交网络中判断两个用户是否存在间接社交关系等,都可以抽象成连通性问题。 问题抽象 可将网络中的点(主机、人)抽象为对象,p-q 表示 p连接到q,连通关系可传递: p-q & q-r => p-r;为简述问题,将两个对象标记为一个整数对,则给定整数对序列就能描述出点网络。 如下图结点数 N = 5 的网络(使用 0 ~...阅读全文

博文 2018-01-28 15:34:36 wuYin

leetcode刷题记录Array篇(1&4~Two Sum&Median of Two Sorted Arrays)

今天写了一道比较简单的和一道难的 #Two Sum 题目:Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. 简单翻译,就是在一个数组中寻找相加和target值相等的两个数的下标,只要返回最先匹配的,并且下标相等的不算。 golang代码: package main import ( "fmt" ) func main()...阅读全文

博文 2017-04-19 08:56:48 L千年老妖

HashMap原理和实现

理我们都知道怎么使用goLang中的map来存储键值对类型的数据,但是它的内部实现是怎么样的?其实map是一种HashMap,表面上看它只有键值对结构,实际上在存储键值对的过程中涉及到了数组和链表。HashMap之所以高效,是因为其结合了顺序存储(数组)和链式存储(链表)两种存储结构。数组是HashMap的主干,在数组下有有一个类型为链表的元素。这是一个简单的HashMap的结构图: HashMap结构当我们存储一个键值对时,HashMap会首先通过一个哈希函数将key转换为数组下标,真正的key-value是存储在该数组对应的链表里。HashMap的数组往往是有限的,那当要存储的键值对很多数组不够或者两个键值对哈希运算后的值相同时,不就会有不同的键值对存储在同一个数组下吗?是的,这个就叫做...阅读全文

博文 2018-07-11 14:34:45 Java小铺

Go设计模式实例:简单工厂

> > 该系列文章将用简单的例子来介绍Go语言设计模式的实现。 -------- 简单工厂模式定义 -------- * 工厂模式提供创建具体实例的功能,使用者无需关心其具体实现。 ---- 适用场景 ---- * 避免客户端知道内部的具体实现,只有工厂才能接触实现细节。返回的实例可以是接口、具体类型等。 ---- 简单实例 ---- * 利用工厂模式求几何图形的边长和面积。 package main import ( "fmt" "math" ) type GeometryType int const ( GeometryRect GeometryType = iota GeometryCicle ) type Geometry interface { Area () float32 Pe...阅读全文

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

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

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

归并排序的 Go 语言实现和优化

查看完整的代码,点击这里 不了解归并排序的可以查看百度百科的分析 归并排序的实现 基本实现 package main import "fmt" // 合并 [l,r] 两部分数据,mid 左半部分的终点,mid + 1 是右半部分的起点 func merge(arr []int, l int, mid int, r int) { // 因为需要直接修改 arr 数据,这里首先复制 [l,r] 的数据到新的数组中,用于赋值操作 temp := make([]int, r-l+1) for i := l; i <= r; i++ { temp[i-l] = arr[i] } // 指向两部分起点 left := l right := mid + 1 for i := l; i <= r; i++...阅读全文

博文 2018-08-30 18:35:21 Donne

[golang] 数据结构-冒泡排序

碎碎念不能再经典的排序算法,说到排序算法大部分可能第一印象就是它了吧。记得大学时老师还花了一节课的时间进行详细解释。 原理冒泡算法(bubble sort) 是一种很简单的交换排序。每轮都从第一个元素开始,依次将较大值向后交换一位,直至整个队列有序。 复杂度和其他低效排序算法一样,平均时间复杂度是O(n^2)。最好的情况就是原队列就是排列好的数组,这个时候时间复杂度就是O(n)。空间复杂度为O(1),用于交换。按顺序通过比较排序的算法都是稳定的,冒泡排序也是这样。 代码 package main import ( "time" "fmt" "math/rand" ) func main() { var length = 15 var list []int // 以时间戳为种子生成随机数,保证...阅读全文

博文 2018-07-30 19:35:51 NicoChen

压测iptables规则条数的限制

前言 今天在使用k8s的时候,由于运用到了calico这个cni插件和k8s自带的NetworkPolicy的功能,就需要考虑到一个性能方面的问题,怎么解释了,由于calico底层使用了iptables来做网络规则的限制,所以每当我们向k8s增加了一个NetworkPolicy的对象的时候,我们就是通过PolicyController往calico的etcd存储里增加记录,然后每个node节点上的calico felix客户端就会读取里面的记录,并对应修改自己的iptables的规则,于是到了这里就会有一个问题抛出来,当我们增加了大量的网络规则之后,我们的iptables的规则数必然会成倍的增加,我们每次查询扫整个iptables表的速度也是下降,那么我们如何保证calico网络的使用效率呢...阅读全文

博文 2019-01-27 23:34:42 Lateautumn_Lin

Redis必知必会之持久化

1.Redis所有的数据保存在内存中,对数据的更新将异步的保存到磁盘上。 2.持久化的方式:快照(MySQL Dump和Redis RDB)、写日志(MySQL Binlog和Redis AOF) 3.Redis RDB触发方式 save(同步命令,替换老文件) bgsave (异步命令,fork() 一个进程处理 一般情况会很快) 自动 命令 save bgsave IO类型 同步 异步 是否阻塞 是 是(发生在fork()) 复杂度 O(n) O(n) 优点 不会消耗额外内存 不阻塞客户端命令 缺点 阻塞客户端命令 需要fork 消耗内存 4.自动生成RDB的配置,本质是每seconds会有changes个改变 就会执行bgsave。 相关配置: stop-writes-on-bgsav...阅读全文

博文 2020-02-08 16:32:39 xx19941215

Golang LeetCode - 1. Two Sum 两数之和

Two Sum 两数之和 Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. Example: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1]. 思路分析 参数:一个数字数组nums,...阅读全文

博文 2020-03-31 23:32:59 Avery_up

golang 实现的一个遗传算法的例子

# golang 实现的一个遗传算法的例子 **假设有N个任务,需要负载均衡器分配给M个服务器节点去处理。每个任务的任务长度、每台服务器节点(下面简称“节点”)的处理速度已知,请给出一种任务分配方式,使得所有任务的总处理时间最短。** ```go package main import ( "fmt" "math/rand" "sort" ) const ( // TaskNum 任务数为100 TaskNum = 100 // NodeNum 计算节点数为10 NodeNum = 10 // TaskLengthMin 任务长度最小值10 TaskLengthMin = 10 // TaskLengthMax 任务长度最大值100 TaskLengthMax = 100 // NodeSp...阅读全文

LeetCode 第1题:Two Sum

题目 给出一个整数数组,找出其中的两个整数,使相加等于指定整数,并返回这两个整数的索引。 假设每组输入只有一种解法,并且不能重复使用同一个元素。 举例: 给出 nums = [2, 7, 11, 15], target = 9, 因为 nums[0] + nums[1] = 2 + 7 = 9, 所以返回 [0, 1]. 思路 最简单也是最直接的想法就是两重循环直接遍历计算就能得到结果,时间复杂度为 。 但这肯定不是最优解。 题目中提到只会有一种解法,那就意味着不会有重复的整数,不然就会有多解。 既然没有重复的,那用一个哈希来存储数据就最合适了,整数为键,索引为值。 那我们要找两个整数的索引就很方便了,在遍历数组的时候,检查和目标的差值是否在哈希中,有的话就是答案了。 Go 实现 func ...阅读全文

博文 2018-12-05 01:34:43 pktangyue

golang刷LeetCode[0005] 最长回文子串

题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假定 s 的最大长度为1000. 示例1: 输入: babad 输出:bab 注意:aba也是有效答案 示例2: 输入:cbbd 输出:bb 题解 1、暴力法 func longestPalindrome(s string) string { var maxLen int var maxStr string for i := 0; i < len(s); i++ { for j := i + 1; j < len(s)+1; j++ { len := isPalindrome(s[i:j]) if len > maxLen { maxStr = s[i:j] maxLen = len } } } return maxStr } fu...阅读全文

博文 2020-01-15 09:32:44 风云风雨

面试:删除链表的节点

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2: 输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9. 说明: 题目保证链表中节点的值互不相同若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点 这题的难度定义为简单,但我觉得如果对于链表题目并不熟练的...阅读全文

博文 2020-03-22 21:32:40 若鱼治水

Let US sort

## 在这篇文章里,我尝试发掘 [Go](https://golang.org/) 语言的所有特性,以便用最优的、利用多核处理器的方式来实现 [归并排序](https://en.wikipedia.org/wiki/Merge_sort)。 时间复杂度为 `O(nlogn)` 的最优排序算法中,归并排序是其中之一。它的原理为将数组分为两部分,分别进行排序,最后再归并,这种做法的开销没那么大。 ![红色表示分割和排序,绿色表示归并](https://raw.githubusercontent.com/studygolang/gctt-images/master/let-us-sort/1_I9QJGWEgHtoo9H_hgVOg4g.png) *颜色说明:红色表示分割和排序,绿色表示归并* 让...阅读全文

golang数据类型rune的使用

我们知道golang的数据类型有布尔型,字符串型,数字类型,派生类型。rune它属于数字类型,类似in32。 官方解释: // rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by convention, to distinguish character values from integer values. type rune = int32 翻译成中文:rune是int32的别名,在所有方面都等同于int32。它是按惯例,用于区分字符值和整数值。 看了官解我还没有了解其真正含义,rune一般用在哪?现在我通过2个例子来讲一下rune的使用。 举例说明 例子1:字符串截取 如...阅读全文

博文 2020-01-21 17:32:43 小手25

拜托,面试别再问我回文链表了!!!(leetcode 234)

题目描述 请判断一个链表是否为回文链表。 示例1: 输入: 1->2 输出: false 示例2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 解题思路 思路1 遍历链表,用数组存下每个节点的值,然后从数组两头开始向中间遍历,是否相等 时间复杂度O(n),空间复杂度O(n) 思路2 遍历一遍链表,得到链表长度n,根据长度的奇偶,找到中间节点,将左半边的链表反转,然后从中间节点分两个方向向左右两边遍历,是否是回文;对左半部分链表进行反转,还原为最初的链表 只需要固定的若干个临时变量,不需要额外开辟空间 时间复杂度为O(n),空间复杂度为O(1) 代码实现 // ListNode Definition for sing...阅读全文

博文 2018-10-23 20:34:58 tomorrowwu

算法 - 和为 K 的子数组 (Subarray Sum Equals K)

在 Leetcode 上实现这个算法时,总是运行超时,于是深入的学习了下 题目详细描述 先上性能测试结果: Benchmark_numSubarraysWithSum1 20 78277388 ns/op 0 B/op 0 allocs/op Benchmark_numSubarraysWithSum2 2000 869859 ns/op 8192 B/op 1 allocs/op Benchmark_numSubarraysWithSum3 5000 298845 ns/op 0 B/op 0 allocs/op Benchmark_numSubarraysWithSum4 30000 43751 ns/op 40993 B/op 2 allocs/op 四种方法 golang 实现源码及...阅读全文

数据结构和算法(Golang实现)(22)排序算法-希尔排序

希尔排序 1959 年一个叫Donald L. Shell (March 1, 1924 – November 2, 2015)的美国人在Communications of the ACM 国际计算机学会月刊发布了一个排序算法,从此名为希尔排序的算法诞生了。 注:ACM = Association for Computing Machinery,国际计算机学会,世界性的计算机从业员专业组织,创立于1947年,是世界上第一个科学性及教育性计算机学会。 希尔排序是直接插入排序的改进版本。因为直接插入排序对那些几乎已经排好序的数列来说,排序效率极高,达到了O(n)的线性复杂度,但是每次只能将数据移动一位。希尔排序创造性的可以将数据移动n位,然后将n一直缩小,缩到与直接插入排序一样为1,请看下列分析...阅读全文

通过leetcode学习常见排序算法及其Go实现

问题描述 75. Sort ColorsGiven an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively. 冒泡排序 算法描述 1 遍历待排序序列2 比较相邻两个数,不相等则交换位置把大数放在小数后面3 重复以上步骤,直到待排序序列为...阅读全文

博文 2017-09-23 05:34:51 酒肉穿肠过

散落在link包中的一些细节

最近有几位同行朋友比较热心的帮忙测试和review了link包的代码,从大家的反馈中,我受益颇多,其中最有感触的是,很多设计的细节是无法通过接口观察出来的,其他人通过阅读代码也不一定能理解理解代码的意图,但是这些细节又是极为有用的,比如使用异步发送与否,对程序的吞吐量影响可以达到接近100%,也就是可以提升或降低一倍的吞吐量,所以我整理这篇文章,分析一下link包当中的一些细节,和设计时候的思路,让大家在使用link包或者开发自己通讯底层的时候有个参考。 首先就从异步和同步收发说起,link包的Session有两个类型的消息发送接口,Send和AsyncSend,分别对应同步和异步发送。使用link包的benchmark工具配合echo server做测试,异步消息发送的吞吐量可以接近于同步...阅读全文

博文 2017-02-10 16:33:58 达达

redis 入门笔记

redis 入门笔记 redis中文文档 [TOC] string (字符串) redis 是一个键值对的数据库,他的数据类型都是 key -> value 这样的类型。 就好比在python中的的dict类型,就好比java中的hashmap类型,和Golang中的map类型这种。 在redis的sting类型中value就是一个字符串。 重要 api api 参数 功能 时间复杂度 set key value 给一个key设置值 O(1) get key 获取一个key的值 O(1) del key 删除一个key-value O(1) incr key key自增1 O(1) decr key key自减1 O(1) incryby key k key增加k O(1) decrby k...阅读全文

博文 2019-04-19 11:34:44 _AlphaBaby_

Go语言性能优化-两数之和算法性能研究

好多人都在刷leetcode,今天我也注册了一个玩玩,发现里面好多都是算法题,好吧,毕业十来年,学的那点可怜的数学知识,全都还给学校了。好了闲话少说,言归正传,让我们看看今天在里面我尝试的第一道题,有点意思, 不只是单纯的算法,还有数据和是否适合的问题。 承题 点开题库,看了第一题,我们看看这道题: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 用了这么多文字描述,其实总结起来就是:数组里那两个数想加等于目标值,找出来这两个数的索引。 题是不难...阅读全文

博文 2018-10-18 19:34:46 飞雪无情

数据结构和算法(Golang实现)(25)排序算法-快速排序

快速排序 快速排序是一种分治策略的排序算法,是由英国计算机科学家Tony Hoare发明的, 该算法被发布在1961年的Communications of the ACM 国际计算机学会月刊。 注:ACM = Association for Computing Machinery,国际计算机学会,世界性的计算机从业员专业组织,创立于1947年,是世界上第一个科学性及教育性计算机学会。 快速排序是对冒泡排序的一种改进,也属于交换类的排序算法。 一、算法介绍 快速排序通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 步骤如下: 先从数列中取出一个...阅读全文

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

golang实现常用集合原理介绍

# golang实现常用集合原理介绍 ## [ArraySort排序数组](https://github.com/chentaihan/container/blob/master/array/arraySort.go) ArraySort使用数组保存数据,新增的时候通过类似二分查找找到插入位置,插入位置后面的数据往后移动一位,插入新元素,查找就是二分查找,删除就是通过二分查找找到对应的元素,之后的元素都向前移动一位。时间复杂度如下: | 功能 | 时间复杂度 | | :--- | :--- | | 新增 | **O**\(n\) | | 删除 | **O**\(n\) | | 查找 | **O**\(logn\) | ## [LinkList单链表](https://github.com/c...阅读全文

博文 2020-04-21 09:32:22 chentaihan

[golang] 数据结构-简单选择排序

理简单选择排序应该是最直观最容易理解的排序方法了。直接从头开始一个一个去比,找出最小的放到最左边。再依次完成其他位的排序。 时间复杂度比较次数固定为O(n^2),数据交换次数是0~n-1次因为会交换不同位置相同数值的数据,所以选择排序并不稳定 代码实现 package main import ( "fmt" ) func main() { var length = 10 var mm = make(map[int]int, length) var o []int // 先准备一个顺序随机的数(qie)组(pian) for i := 0; i < length; i++ { mm[i] = i } for k, _ := range mm { o = append(o, k) } fmt.P...阅读全文

博文 2018-07-10 00:35:40 NicoChen

用Go写算法:求最小可用自然数

前言 前一段时间在 reddit 上看到有人推广一篇名为 GopherCon 2018 - Demystifying Binary Search Tree Algorithms 的博客,博客中列举了传统大学里学习算法的种种弊端,并强调了用 Go 实现算法是多么简单有趣,然后拿二叉树举了个例子。读完这篇博客以后,我不得不说,真心没看出来 Go 写算法的优势在哪里。但是,配图确实萌翻了,下面盗图一副。 虽然不会画画,但是并不妨碍用 Go 做一些算法实现的尝试。这里我从 "Pears of Functional Algorithms Design" 里拿了一道题:给定一个无序自然数数组 A,求出不在 A 中的最小自然数,约束条件如下: A 中的元素个数是有限的,每个元素都是自然数,并且互不相同(自...阅读全文

博文 2018-10-13 01:34:39 oscarzhao

GOLANG Web请求参数验证

基于golang web项目实际开发中在controller层对客户端请求参数进行验证,这样导致controller层代码冗余度非常高,影响开发效率。代码示例: feedback := &mysql_model.OfbankFeedback{} err := json.Unmarshal(body, feedback) feedback.FStatus=1 feedback.CreateTime=time.Now() if err != nil { resp := apiservice.GenerateResponse(0, "请求参数有误", "") rw.Write([]byte(resp)) return } if feedback.Phone=="" { resp := apiser...阅读全文

博文 2018-07-17 12:34:44 怪咖_OOP