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

golang中sort包用法

golang中也实现了排序算法的包sort包. sort包中实现了3种基本的排序算法:插入排序.快排和堆排序.和其他语言中一样,这三种方式都是不公开的,他们只在sort包内部使用.所以用户在使用sort包进行排序时无需考虑使用那种排序方式,sort.Interface定义的三个方法:获取数据集合长度的Len()方法、比较两个元素大小的Less()方法和交换两个元素位置的Swap()方法,就可以顺利对数据集合进行排序。sort包会根据实际数据自动选择高效的排序算法。 type Interface type Interface interface { Len() int // Len 为集合内元素的总数 Less(i, j int) bool //如果index为i的元素小于index为j的元素...阅读全文

博文 2015-06-17 20:02:37 chenbaoke

go语言的排序和搜索

晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题。排序 sort 是个基本的操作,当然搜索 search 也是。c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便; c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便。go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),所以,go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。 补注: 近来又看 go 的排序, 发现以前对 go 的排序理解的有点浅了。 go 的排序思路和 c 和 c++ 有些差别。 c 默认是对数组进行排序, c+...阅读全文

博文 2014-10-24 11:38:53 陆仁贾

Go语言标准库堆(heap)封装及堆排序实现

Go语言的OOP,接口,接口的组合,基础库的函数及接口如何抽象设计, 这些东西在Go的Heap源码及演示例子处理中,都有很好的展示. 在"container/heap"中,它的接口是如下定义的: type Interface interface { sort.Interface Push(x interface{}) // add x as element Len() Pop() interface{} // remove and return element Len() - 1. } 我不太明白为啥是这样的设计,只好通过下面的方法来尝试了解. 1. 通过测试例子,了解使用方式. 2. 试图还原原始场景,即利用源码整合实现了一个原始的堆排序 然后通过这两者的对比,来慢慢体会. contain...阅读全文

博文 2015-06-17 23:00:36 xcltapestry

堆排序(golang实现)

封装成函数: //堆排序 //s[0]不用,实际元素从角标1开始 //父节点元素大于子节点元素 //左子节点角标为2*k //右子节点角标为2*k+1 //父节点角标为k/2 func HeapSort(s []int) { N := len(s) - 1 //s[0]不用,实际元素数量和最后一个元素的角标都为N //构造堆 //如果给两个已构造好的堆添加一个共同父节点, //将新添加的节点作一次下沉将构造一个新堆, //由于叶子节点都可看作一个构造好的堆,所以 //可以从最后一个非叶子节点开始下沉,直至 //根节点,最后一个非叶子节点是最后一个叶子 //节点的父节点,角标为N/2 for k := N / 2; k >= 1; k-- { sink(s, k, N) } //下沉排序 fo...阅读全文

博文 2017-09-03 07:05:01 imroc

golang-mongodb范例

1 package main 2 3 import ( 4 "log" 5 6 "gopkg.in/mgo.v2" 7 "gopkg.in/mgo.v2/bson" 8 ) 9 10 type Address struct { 11 Address string 12 } 13 type Location struct { 14 Longitude float64 15 Latitude float64 16 } 17 18 type Person struct { 19 Id bson.ObjectId `bson:"_id"` 20 Name string 21 Age_Int int 22 Address []Address 23 Location Location 24 } 25 2...阅读全文

博文 2016-03-17 01:00:01 --xiaoyao--

golang map输出排序

由于GoLang Map 内部存储是无序的,当需要按顺序获得map存储的key -value值时,应该对遍历出来的结果进行重新排序; 在go 1.8版本后,提供的slice sort 功能使排序更简单: package main import ( "fmt" "sort" ) func main() { m := map[string]int{ "something": 10, "yo": 20, "blah": 20, } type kv struct { Key string Value int } var ss []kv for k, v := range m { ss = append(ss, kv{k, v}) } sort.Slice(ss, func(i, j int) boo...阅读全文

博文 2018-06-07 15:30:02 dpf-10

使用golang学习算法(1)-排序

前言 终于感觉到算法的重要了。于是打算继续学习下。 其实算法跟语言没有啥关系,用啥语言都可以实现关键是思路,最近正好在学习golang。打算把算法的编写使用golang完成。 没有使用IDE,使用的是sublime2+ golang的插件,然后使用命令行进行编译。 开发效率也不低,也支持语言的自动补齐。 搭建环境【http://blog.csdn.net/freewebsys/article/details/17955255】 学习的参数书,使用《算法导论》,也就是敲敲书上的代码学习下。 1,插入排序 package main func InsertSort(a []int) { for j := 1; j < len(a); j++ { var key = a[j] var i = j -...阅读全文

博文 2014-11-14 10:00:03 xoxoxo

Golang学习(6)——sort包

Golang学习 - sort 包--------------------// 满足 Interface 接口的类型可以被本包的函数进行排序。type Interface interface { // Len 方法返回集合中的元素个数 Len() int // Less 方法报告索引 i 的元素是否比索引 j 的元素小 Less(i, j int) bool // Swap 方法交换索引 i 和 j 的两个元素的位置 Swap(i, j int)}// 对 data 进行排序(不保证相等元素的相对顺序不变)// data 默认为升序,执行 Reverse 后为降序。func Sort(data Interface)// 对 data 进行排序(保证相等元素的相对顺序不变)// data 默认...阅读全文

博文 2017-02-09 18:26:28 1160636144

二分法查找(golang实现)

封装成函数: //二分法查找 //切片s是升序的 //k为待查找的整数 //如果查到有就返回对应角标, //没有就返回-1 func BinarySearch(s []int, k int) int { lo, hi := 0, len(s)-1 for lo <= hi { m := (lo + hi) >> 1 if s[m] < k { lo = m + 1 } else if s[m] > k { hi = m - 1 } else { return m } } return -1 } 测试: s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} fmt.Println(BinarySearch(s, 6)) 输出: ...阅读全文

博文 2017-09-03 07:05:00 imroc

算法代码实现之二分法查找,Golang(Go语言)实现

封装成函数: //二分法查找//切片s是升序的//k为待查找的整数//如果查到有就返回对应角标,//没有就返回-1func BinarySearch(s []int, k int) int { lo, hi := 0, len(s)-1 for lo <= hi { m := (lo + hi) >> 1 if s[m] < k { lo = m + 1 } else if s[m] > k { hi = m - 1 } else { return m } } return -1} 测试: s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}fmt.Println(BinarySearch(s, 6)) 输出: ...阅读全文

博文 2016-03-03 19:00:00 QQ245671051

算法代码实现之堆排序,Golang(Go语言)实现

封装成函数: //堆排序//s[0]不用,实际元素从角标1开始//父节点元素大于子节点元素//左子节点角标为2*k//右子节点角标为2*k+1//父节点角标为k/2func HeapSort(s []int) { N := len(s) - 1 //s[0]不用,实际元素数量和最后一个元素的角标都为N //构造堆 //如果给两个已构造好的堆添加一个共同父节点, //将新添加的节点作一次下沉将构造一个新堆, //由于叶子节点都可看作一个构造好的堆,所以 //可以从最后一个非叶子节点开始下沉,直至 //根节点,最后一个非叶子节点是最后一个叶子 //节点的父节点,角标为N/2 for k := N / 2; k >= 1; k-- { sink(s, k, N) } //下沉排序 for N > ...阅读全文

博文 2016-03-01 21:00:00 QQ245671051

快速排序----Go语言版

快速排序: 一:原理 快速排序使用的是分治算法思想,选择序列中的一个支点,把大于支点的元素放在右边,小于支点的元素放在左边(升序),之后以支点为划分点把序列划分成两个子序列,然后循环进行寻找支点,交换元素,划分子序列,直到序列已经排好序为止。 二:性能 最好时间复杂度为O(n); 最坏时间复杂度为O(n^2); (待排序序列为正序或逆序); 平均时间复杂度为O(nlog2n); (划分的子序列的长度相同) 三:代码详见:https://github.com/sunnybird/go/blob/master/quickSort.go 顺便吐槽一下,Go没有while真心不习惯。。。。。。。。。...阅读全文

博文 2015-02-27 11:00:11 u011522720

golang按key值进行升序排序(ksort),对字符串进行sha1哈希

在对接PHP语言实现的签名的时候,看见对方用了ksort,由于golang里面对map的遍历是无序的,所以用golang实现了对map按key值进行升序排序: package main import ( "crypto/sha1" "encoding/hex" "fmt" "sort" "strconv" "time" ) func main() { timeStamp := time.Now().Unix() params := map[string]string{ "staff_name": "hhh", "client_id": "123", "staff_id": "114", "time": strconv.FormatInt(timeStamp, 10), "secret": "...阅读全文

博文 2019-04-01 18:34:42 Iris_Yzy

【Go语言】基本类型排序和 slice 排序

Go 是通过 sort 包提供排序和搜索,因为 Go 暂时不支持泛型(将来也不好说支不支持),所以,Go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。 引言 Go 的排序思路和 C 和 C++ 有些差别。 C 默认是对数组进行排序, C++ 是对一个序列进行排序, Go 则更宽泛一些,待排序的可以是任何对象, 虽然很多情况下是一个 slice (分片, 类似于数组),或是包含 slice 的一个对象。 排序(接口)的三个要素: 待排序元素个数 n ; 第 i 和第 j 个元素的比较函数 cmp ; 第 i 和 第 j 个元素的交换 swap ; 乍一看条件 3 是多余的, c 和 c++ 都不提供 swap 。 c 的 qs...阅读全文

博文 2016-09-22 05:00:02 u010983881

go语言的排序和搜索(转载)

http://studygolang.com/articles/1598 go语言的排序和搜索 晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题。排序 sort 是个基本的操作,当然搜索 search 也是。c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便; c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便。go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),所以,go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。 补注: 近来又看 go 的排序, 发现以前对 go 的排序理...阅读全文

博文 2016-01-11 03:00:00 basque

go语言的排序和搜索

晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题。排序 sort 是个基本的操作,当然搜索 search 也是。c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便; c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便。go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),所以,go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。 补注: 近来又看 go 的排序, 发现以前对 go 的排序理解的有点浅了。 go 的排序思路和 c 和 c++ 有些差别。 c 默认是对数组进行排序, c+...阅读全文

博文 2015-07-27 13:00:01 nop4ss

NSQ学习:实现有序的消息队列

NSQ是一个内存+磁盘型的消息中间件,它使用push流的方式源源不断把消息推送给客户端,并且为了使服务端更加简单、高效,NSQ并不提供有序的消息队列。因此,如果对消息有顺序要求,只有两种解决办法: 改用类似kafka之类的有序消息队列; 生产者和消费者达成一个协议,比如增加一个序列号或者时间戳来表示顺序。 本文要介绍的是第二种方法,下面就来简单用golang实现一个有序的NSQ顺序消息队列。 首先,使用go-nsq客户端写一个main函数,并且连接上nsqlookupd: func main() { cfg := nsq.NewConfig() cfg.LookupdPollInterval = time.Second customer, err := nsq.NewConsumer("te...阅读全文

博文 2019-06-11 23:32:41 imxyb

用反射实现二维数组key-value排序

首先了解一下概念: 反射是用来检测存储在接口变量内部(值value,类型type) 的一种机制。在Golang的reflect反射包中,提供了两种类型(或者说两个方法)让我们可以很容易的访问接口变量内容,分别是reflect.ValueOf() 和 reflect.TypeOf(): reflect.TypeOf: 直接给我们想要的type类型,如float64、int、指针、struct 等类型 reflect.ValueOf:直接给我们想要的具体的值,如520具体数值,或者类似&{13 "Hy" 26} 结构体struct的值 具体用法清参考reflect包文档。 快速排序 O(nlog2 n) 最坏O(n^2) 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有...阅读全文

博文 2018-10-22 15:34:41 海雲_2d72

PAT:05-1. List Components (25),Go语言解答

题目大概意思:给定一个有N个顶点和E个边的无向图,请分别用DFS和BFS遍历无向图。假定顶点编号为0到N-1,在遍历的时候总是从最小编号的顶点出发,在访问相邻结点的时候,按升序的方式访问。 For a given undirected graph with N vertices and E edges, pleaselist all the connected components by both DFS and BFS. Assume thatall the vertices are numbered from 0 to N-1. While searching,assume that we always start from the vertex with the smallestind...阅读全文

博文 2015-10-25 17:00:05 u013564276

Golang基础(二)-- map用法和本质

本文转自:https://www.cnblogs.com/demon89/p/7259724.html Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。 Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。 所以在golang中Map的遍历不像其他语言一样,它的输出是无序的 func traversal() { tmap := make(map[int]string) tmap[0] = "a" tmap[1] = "b" tmap[2] = "c" tmap[3] = "d" tmap[4] = "e" tmap[...阅读全文

博文 2018-08-22 19:35:12 魔改谢馒头

leetcode刷题记录Array篇(31~Next Permutation)

##31.Next Permutation 题目:Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers. If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order). The replacement must be in-place, do not allocate extra memory. 翻译:实现下一个排列,将数字重新排列成数字的下一...阅读全文

博文 2017-04-24 12:54:19 L千年老妖

Go语言词频统计

/** * Go语言词频统计,运行命令go run src/code/main.go test/words.txt * @author unknown * @since 2019-12-18 * 文件内容: hello tom glad to meet you yes me glad to meet you how are you * 输出结果: Word Frequency are 1 glad 2 hello 1 how 1 me 1 meet 2 to 2 tom 1 yes 1 you 3 Frequency → Words 1 are, hello, how, me, tom, yes 2 glad, meet, to 3 you */ package main import ( ...阅读全文

博文 2019-12-18 17:33:16 huang_he_87

Redis必知必会之API

一些废话 1.Redis是一个开源、基于键值的存储系统、多种数据结构、功能丰富。2.Redis支持持久化,断电不丢数据,对数据的更新异步保存到磁盘上。3.Redis支持字符串、哈希、列表、集合、有序集合、位图、超小内存唯一计数、地理信息定位。4.Redis支持多语言客户端,支持发布订阅,Lua脚本,事物,不依赖外部库,单线程模型,支持主从复制,高可用,分布式。5.Redis典型使用场景有缓存系统、计数器,消息队列系统、排行榜、社交网络、实时系统。6.启动方式分为 最简启动 redis-server 动态参数 redis-server --port 6380 配置文件 redis-server configPath 7.验证是否启动 ps -ef | grep redis netstat -a...阅读全文

博文 2020-01-06 21:32:40 xx19941215

Go实战--golang中各种排序算法实现以及生成随机数

生命不止,继续 go go go !!! 排序,对于每种编程语言都是要面对的。这里跟大家一起分享golang实现一些排序算法,并且说明如何生成随机数。 当然,golang为我们提供了sort包,也提供了math/rand包,这就大大方便了我们。 还要说明一下,这里不会详细介绍各种排序算法的原理,如需探索自行Google。 sort package Package sort provides primitives for sorting slices and user-defined collections. golang中也实现了排序算法的包sort包. type Interface type Interface interface { Len() int // Len 为集合内元素的总数 ...阅读全文

博文 2017-07-20 04:01:08 wangshubo1989

Lite语言——从入门到放弃(一)

Lite 是我设计开发的一门编程语言,主要关注如何设计更简洁的语法,经过两年改进,现在只需要很少的代码量就可以表达现代编程语言的大部分逻辑,去掉了关键字设计。 目前仍在持续改进中,欢迎到 Github 提意见,走过路过别忘了点个 Star 。 github.com/kulics/lite 变量声明 在 Lite 中,变量声明的格式为 # id type # a int 是的,不需要关键字开头,只需要用空格分割,后面部分就是类型。 也不需要 ; 结尾,编译器会根据特定换行规则断句,除非想在一行内写多个语句,就可以加上 ;。 Lite 是一门强类型语言,大部分时候都需要明确的类型,但是有丰富的自动推导特性节省代码。 赋值 一句话带过。 # id = value # a = 0 声明时初始化 把前...阅读全文

博文 2019-07-21 22:02:36 kulics

用反射实现二维数组key-value排序

首先了解一下概念: 反射是用来检测存储在接口变量内部(值value,类型type) 的一种机制。在Golang的reflect反射包中,提供了两种类型(或者说两个方法)让我们可以很容易的访问接口变量内容,分别是reflect.ValueOf() 和 reflect.TypeOf(): reflect.TypeOf: 直接给我们想要的type类型,如float64、int、指针、struct 等类型 reflect.ValueOf:直接给我们想要的具体的值,如520具体数值,或者类似&{13 "Hy" 26} 结构体struct的值 具体用法清参考reflect包文档。 快速排序 O(nlog2 n) 最坏O(n^2) 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有...阅读全文

博文 2018-10-22 13:34:39 海雲_2d72

生成排列的算法汇总

概述 我觉得自己的算法思维能力有些薄弱,所以基本上每天晚上都会抽空做1-2到 leetcode 算法题。这两天遇到一个排列的问题——Next Permutation。然后我去搜索了一下生成排列的算法。这里做一下总结。 算法 目前,生成一个序列的排列常用的有以下几种算法: 暴力法(Brute Force) 插入法(Insert) 字典法(Lexicographic) SJT算法(Steinhaus-Johnson-Trotter) 堆算法(Heap) 下面依次介绍算法的内容,实现和优缺点。 在介绍这些算法之前,我们先做一些示例和代码上的约定: 我的代码实现是使用 Go 语言,且仅实现了求int切片的所有排列,其它类型自行扩展也不难。 除非特殊说明,我假定输入的int中无重复元素,有重复元素可自...阅读全文

博文 2019-10-16 22:02:48 孤雨

golang 链表合并

思路来源: https://leetcode-cn.com/probl... 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 func main(){ a := new(Node) a.Data = 1 a.Next = &Node{2, &Node{4, nil}} b := new(Node) b.Data = 1 b.Next = &Node{3, &Node{4, nil}} c := merge(a, b) for { fmt.Print(c.Data) if c.Next == nil { break } c = c.Next } } type N...阅读全文

博文 2020-05-28 15:32:54 氓浅

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_

让我们一起啃算法----合并两个有序链表

合并两个有序链表(Merge-Two-Sorted-Lists) 题干如下: 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4来源:力扣 这个题目和 两数相加 相似,都是考察对链表的操作。其实具体实现方式也差不多啦。 解题思路 根据题干我们知道,给定的两个链表是有序的。假设 l1 指向其中一个链表的头部,l2 指向另一个链表的头部,并初始化 head 和 current,使它们指向一个默认的节点。我们比较 l1 指向节点的值 V(l1) 与 l2 指向节点的值 V(l2) 的大小,如果 V(l1) 的值小于 V(l2) 的值,则使 current.next 指向...阅读全文

博文 2020-04-30 11:32:48 三斤和他的朋友们

《Go语言四十二章经》第二十九章 排序(sort)

《Go语言四十二章经》第二十九章 排序(sort) 作者:李骁 ## 29.1 sort包介绍 Go语言标准库sort包中实现了3种基本的排序算法:插入排序、快排和堆排序。和其他语言中一样,这三种方式都是不公开的,他们只在sort包内部使用。所以用户在使用sort包进行排序时无需考虑使用那种排序方式,sort.Interface定义的三个方法:获取数据集合长度的Len()方法、比较两个元素大小的Less()方法和交换两个元素位置的Swap()方法,就可以顺利对数据集合进行排序。sort包会根据实际数据自动选择高效的排序算法。 ```go type Interface type Interface interface { Len() int // Len 为集合内元素的总数 Less(i, j...阅读全文

博文 2018-10-12 20:38:10 roteman

通过sort包的使用,理解golang接口的应用

在go语言的应用中,涉及到排序,通常使用sort包来实现,sort包中实现了3种基本的排序算法:插入排序,快排和堆排序,这里不打算探讨排序算法,而会通过使用sort包,来理解interface的应用。 sort.go type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i should sort before the element with index j. Less(i, j int) bool // Swap swaps the elements with ind...阅读全文

博文 2017-12-18 12:04:43 Cedrus

【Golang语言】LeetCode1122. Relative Sort Array

给你两个数组,arr1 和 arr2, arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。https://leetcode-cn.com/problems/relative-sort-array 输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6] 输出:[2,2,2,1,4,3,3,9,6,7,19] 题意:arr2给你自定义了一个数字大小顺序,将arr1里的数按照2中定义的规则拍一拍。 思路:统计1中的数字出现的次数,遍历2,依次取出1中的数,按照统计的...阅读全文

博文 2019-08-25 09:03:09 努力的C

老弟在吗,我怀疑Go标准库中的二分查找有bug!

"老弟在吗,我怀疑Go标准库中的二分查找有bug!" "老哥别慌,源码之前没有秘密,你坐下听我吹吹c++的牛逼。。" 下面这段Go代码,你觉得index的结果是多少? arr := []int{1, 3, 5, 7} index := sort.Search(len(arr), func(i int) bool { return arr[i] == 3 }) index的结果并不是1,而是4。(额,返回4是什么鬼,难道不应该找到就返回对应的下标,找不到就返回-1吗) 我们映象中的二分是这样的: while (low <= high) { mid := (low + high) / 2 if arr[mid] < target { low = mid + 1 } else if arr[mid...阅读全文

博文 2020-05-01 14:32:40 就想叫yoko

ARTS 第2周 | LeetCode 31 | Go 会支持泛型吗 | Go 中的值方法和指针方法

ARTS ARTS 是陈浩(网名左耳朵耗子)在极客时间专栏里发起的一个活动,目的是通过分享的方式来坚持学习。 每人每周写一个 ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。 本周内容 这一周的 ARTS 你将看到 一道看似是考排列(permutation)实际上是智力题的 LeetCode 31 题 Next Permutation. Go 官方如何在保持原来内味儿的基础上尝试提供新的泛型特性。 当我们在谈论 Go 中方法的 receiver 是值类型还是指针类型时,实际上是在说什么。 英语可能是大部分人此生唯一一项学习了十几年却从来没有真正使用过的技能。 Algorithm 废话不多说...阅读全文

博文 2020-05-25 10:32:44 casmo澎湃哥

使用sort包排序

在程序开发中,不可避免的需要给数据集进行排序,如果在语言级别不提供支持的话,我们则需要自己写算法进行数据的处理,麻烦还不一定高效。 幸好Golang在标准包中,官方有提供sort包中Sort()函数提供排序功能。并且天然支持[]int,[]float64,[]string切片的排序查找功能,并且也能够实现对自定义类型集合的排序。 下面我们先来看下golang中Sort函数的结构是什么样的。 func Sort(data Interface) { n := data.Len() quickSort(data, 0, n, maxDepth(n)) } 可以看到,该函数接收的唯一的参数就是待排序集合,该集合应是一个Interface,而我们如果需要让自定义类型的集合能够被排序,则需要实现该int...阅读全文

博文 2020-04-13 09:32:43 YXWKY

让我们一起啃算法----合并两个有序链表

合并两个有序链表(Merge-Two-Sorted-Lists) 题干如下: 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4来源:力扣 这个题目和 两数相加 相似,都是考察对链表的操作。其实具体实现方式也差不多啦。 解题思路 根据题干我们知道,给定的两个链表是有序的。假设 l1 指向其中一个链表的头部,l2 指向另一个链表的头部,并初始化 head 和 current,使它们指向一个默认的节点。我们比较 l1 指向节点的值 V(l1) 与 l2 指向节点的值 V(l2) 的大小,如果 V(l1) 的值小于 V(l2) 的值,则使 current.next 指向...阅读全文

博文 2020-05-05 16:32:40 三斤和他的朋友们

240.搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 target = 5,返回 true。 给定 target = 20,返回 false。 思路 1.根据此二维矩阵给出的性质,可以从二维数组的右上角开始搜索,若target大于当前元素,我们的检索方向就向下,若小于,我们的检索方向就向左,若检索出界,还没找到结果,直...阅读全文

博文 2020-01-01 02:32:55 youzhihua