golang
云治
这个作者很懒,什么都没留下…
展开
-
经典算法之动态规划
动态规划:将待求解的问题分解成若干个相互联系的子问题,先求解子问题,然后从这些子问题的解得到原问题的解; 对于重复出现的子问题,只在第一次遇到的时候对它进行求解,并把答案保存起来,让以后再次遇到时直接引用答案,不必重新求解。 适合用动态规划来解决的问题,都具有下面三个特点:最优化原理、无后效性、有重叠子问题。经典题:斐波那契、求最长回文子串、求最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"ab...原创 2022-01-24 18:23:27 · 358 阅读 · 0 评论 -
go实现的经典排序算法
冒泡排序/选择排序/直接插入/归并排序/快排package mainimport "fmt"func swap(arr *[]int, m,n int){ temp := (*arr)[m] (*arr)[m] = (*arr)[n] (*arr)[n] = temp}// 冒泡排序//外层循环是比较的趟数,内层循环是每一趟冒泡:比较相邻的两个数,交换较小者在前,使最小者慢慢浮上来func bubbleSort(arr *[]int){ length := len(*arr原创 2022-01-23 20:11:43 · 357 阅读 · 0 评论 -
golang的数组、切片和append一些小点
这几天刷题时,总是被切片和append坑了,重新看书后,发现是自己当时对他们认识不到位,重新补充下。从代码分析:var arr1 = [3]int{1,2,3} //定义一个数组,需要在初始化时指定长度var arr2 = arr1 //将一个数组赋值给另一个数组时,传递的是一份拷贝arr2[1] = -2fmt.Println(arr1,arr2) //[1 2 3] [1 -2 3]// 不指定长度 则为切片var sli1 = []int{1,2,3}sli2 :=原创 2022-01-20 14:47:50 · 596 阅读 · 0 评论 -
经典算法之分治
分治:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,该问题的规模缩小到一定的程度就可以容易地解决,这些子问题互相独立且与原问题形式相同,以便各个击破,分而治之。分治法一般算法框架(伪代码)Divide-and-Conquer§1. if |P|≤n02. then return(ADHOC§) 3. 将P分解为较小的子问题 P1 ,P2 ,…,Pk 4. for i=1 to k 5. do yi = Divide-and-Conquer(Pi) //递归解决Pi原创 2022-01-19 15:40:02 · 1221 阅读 · 0 评论 -
经典算法之回溯
解决一个回溯问题,实际上就是一个决策树的遍历过程。路径:也就是已经做出的选择。 选择列表:也就是你当前可以做的选择。 结束条件:也就是到达决策树底层,无法再做选择的条件。遍历当前可选择的项,在递归调用之前做选择,在递归调用之后撤销选择回溯算法的框架:result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做...原创 2022-01-19 15:13:08 · 342 阅读 · 0 评论 -
剑指offer 二叉树相关 Go实现
package jianzhiimport ( "container/list" "fmt")type TreeNode struct { Val int Left *TreeNode Right *TreeNode}func levelOrder(root *TreeNode) []int { if root == nil{ return []int{} } var queue = list.New() .原创 2022-01-17 18:02:08 · 280 阅读 · 0 评论 -
剑指刷题 查找数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解题思路:第一种方法 就是暴力遍历 第二种方法是 首先判断 arr[0]==0如果不是 让0 下标和a...原创 2019-08-02 11:28:22 · 117 阅读 · 0 评论 -
GoDS简单使用
嘻嘻 发现一个好东西:https://github.com/emirpasic/gods类似于C++的STL容器,使用GO语言封装了多种基础的数据结构,包括set/tree/list/map/stack,以及迭代器等,接下来挑几个常用的进行使用示范,最全的文档还是来自官网readmearraylistarraylist的数据结构非常简单,使用interface类型接收所有类型的value,并且会返回interface类型:type List struct { eleme..原创 2021-10-13 16:48:24 · 1064 阅读 · 0 评论 -
使用docker构建镜像,并放到另一台机器使用
记一次docker 使用的菜鸟心酸史首先我有一个项目 A.go 需要将其打包成镜像使用,此时还需要一个Dockerfile。Dockerfile的书写如下FROM Ubuntu# 复制应用程序,下面需要根据自己应用情况进行替换COPY A /home/work/WORKDIR /home/work/EXPOSE 1416ENTRYPOINT ["./A"]使用docker进行打包go build -o Asudo docker build ./ -t A_contai.原创 2020-11-30 17:40:27 · 2956 阅读 · 0 评论 -
关于gopath go111module的坑
使用 go env 查看go的环境变量go path 显示go的路径,一般go的模块会安装到该路径下go111module 是否使用模块支持的变量,如果设为off ,代表无模块支持,import的包会从gopath下寻找。如果设为on,代表模块支持,会忽略gopath,在go.mod中寻找依赖。所以如果go111module = 'off',要将项目放在gopath的路径下,并使用go get 安装需要的第三方模块如果 go111module = 'on' ,可以go mod in.原创 2020-09-08 15:23:27 · 4694 阅读 · 1 评论 -
go 入门级 一个http服务
ServeMux 是go自带的http请求处理器,是一个路由表,存放key-value。根据请求路径(key)在路由表中查找,(按照最长匹配原则)并将请求交给对应的处理函数(value).导入http包,介绍几个方法: http.ListenAndServe (addr string, handler Handler) //传入请求路径和路由表的handler handler :=http.NewServeMux() //创建 一个路由表的handler handle原创 2020-08-05 11:57:21 · 274 阅读 · 1 评论 -
使用goroutine和channel写一个信号量
使用goroutine通信例子:func write(intChan chan int, exitChan chan bool) { for i := 0; i < 10; i++ { intChan <- i } exitChan <- true close(intChan)} func read(intChan chan int, exitChan chan bool) { for { i, ok := <-intChan if !ok {原创 2020-08-03 16:05:26 · 237 阅读 · 0 评论