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

leetcode_409

Golang: 思路:这题属于简单题,思考上存在一点难度,最长回文串构建就是把所有成对的字母全部集中到一起,如果还有多余的字母,取一个即可。 代码如下: func longestPalindrome(s string) int { if len(s)<=1 { return len(s) } temp:=make([]int,52) for _,v:=range s{ if v>=97 { temp[v-97]++ }else{ temp[v-39]++ } } f,sum:=0,0 for i:=0; i< len(temp); i++ { sum=sum+temp[i] if f==0 { if temp[i]%2!=0 { f=1 } }else{ if temp[i]%2!=0 { ...阅读全文

博文 2020-03-20 21:32:45 淳属虚构

Golang interface

1_CdjOgfolLt_GNJYBzI-1QQ.jpeg 接口概念 接口 即一组方法定义的集合,定义了对象的一组行为,由具体的类型实例实现具体的方法。换句话说,一个接口就是定义(规范或约束),而方法就是实现,接口的作用应该是将定义与实现分离,降低耦合度。习惯用“er”结尾来命名,例如“Reader”。接口与对象的关系是多对多,即一个对象可以实现多个接口,一个接口也可以被多个对象实现。 ​接口(interface) 是Go语言整个类型系统的基石,其他语言的接口是不同组件之间的契约的存在,对契约的实现是强制性的,必须显式声明实现了该接口,这类接口称之为“侵入式接口”。而Go语言的接口是隐式存在,只要实现了该接口的所有函数则代表已经实现了该接口,并不需要显式的接口声明。 接口的作用 ​接口是实现...阅读全文

博文 2020-04-09 18:32:49 frederick_hou

并发编程的数据竞争问题以及解决之道

Go语言以容易进行并发编程而闻名,但是如果稍不注意,并发程序可能导致的数据竞争问题(data race)就会经常出现在你编写的并发程序的待解决Bug列表中-- 如果你不幸在代码中遇到这种错误,这将是最难调试的错误之一。 今天这篇文章里我们首先来看一个导致数据竞争的示例程序,使用go命令行工具检测程序的竞争情况。然后我们将介绍一些在不改变程序核心逻辑的情况下如何绕过并解决并发情况下的数据竞争问题的方法。最后我们会分析用什么方法解决数据竞争更合理以及留给大家的一个思考题。 本周这篇文章的主旨概要如下: 并发程序的数据竞争问题。 使用go命令行工具检测程序的竞争情况。 解决数据竞争的常用方案。 如何选择解决数据竞争的方案。 一道测试自己并发编程掌握程度的思考题。 数据竞争 要解释什么是数据竞争我们...阅读全文

博文 2020-05-28 15:35:07 kevinyan

leetcode_1013

Golang: 思路:先求和判断能否除以3,能的话开始遍历元素并相加,每当和等于总和的1/3时,将和清零并继续向下遍历,再出现一次和的1/3即可返回true,否则返回false 代码如下: func canThreePartsEqualSum(A []int) bool { sum:=0 for i:=0;i阅读全文

博文 2020-03-03 15:33:16 淳属虚构

leetcode_47

Golang: 写在前面:这题如果是用我46的代码是改不出来的,除非得到所有结果再去删除重复的,但这样自然就没什么意思了,我在这道题上花了差不多整整半天,去研究了深度优先、回溯和剪枝,并试图应用进我的代码里,但最终还是失败了。 思路:可以参见liweiwei大佬的题解,很有帮助。我只在这里描述下我上一题的代码为什么无法应用在这一次的题里。我上一题的解法是,如果有[1,2,3,4,5]这样的数组,我在第一轮的起始数组分别是[1,2,3,4,5],[2,1,3,4,5],[3,2,1,4,5],[4,2,3,1,5]等。即我每次会将第i位和第1位互换,这在全排列里是行得通的。而深度优先加回溯第一轮的起始数组是[1,2,3,4,5],[2,1,3,4,5],[3,1,2,4,5],[4,1,2,3...阅读全文

博文 2020-01-31 18:32:39 淳属虚构

第八章 九析带你轻松完爆 go - 数组玩

系列文章:总目录索引:九析带你轻松完爆 go 系列教程目录1 前言2 一维数组 2.1 一维数组声明 2.2 一维数组初始化 2.2.1 全量初始化 2.2.2 长度推测初始化 2.2.3 指定索引初始化 2.3 一维数组遍历 2.3.1 索引遍历数组 2.3.2 range 遍历数组3 二维数组 3.1 二维数组声明 3.2 二维数组初始化 3.3 二维数组遍历 3.3.1 索引遍历 3.3.2 range 遍历1 前言 如果你对博客有任何疑问或者想更深入学习 go,请加微信群,我们一起进步:2 一维数组2.1 一维数组声明 一维数组声明是三段式:var arr_name [arr_length] arr_type 样例代码如下:var arr [2]int2.2 一维数组初始化2.2.1...阅读全文

博文 2020-03-01 21:33:10 九析

leetcode_328

Golang: 思路:这题O(1)空间复杂度,其实只需要拆分成两个链表,然后连接下就好了 代码如下: func oddEvenList(head *ListNode) *ListNode { nd1,nd2:=&ListNode{Val:0},&ListNode{Val:0} node1,node2,temp,flag:=nd1,nd2,head,0 for temp!=nil{ if flag%2==0{ node1.Next=temp node1=node1.Next }else{ node2.Next=temp node2=node2.Next } temp=temp.Next flag++ } node2.Next=nil node1.Next=nd2.Next return nd1...阅读全文

博文 2020-04-05 20:33:06 淳属虚构

Golang持续集成服务之Travis教程

为什么使用集成服务呢 我们向github提交代码时, 我们得保证我们的代码是能运行的, 我们会写测试用例, 保证我们的代码功能能正常使用.常见大神们的开源项目都一个绿色图标"build|passing 表示构建OK 如何使用Travis服务呢 打开这个网站 https://travis-ci.org/ 点击登陆, 使用github登陆.目前似也只支持github 1. 添加仓库 [图片上传失败...(image-cf0199-1587733744133)] 2. 开启集成 [图片上传失败...(image-586659-1587733744133)] 3. 项目根目录添加.travis.yml文件 cd ~/github_webhook touch .travis.yml 4. 编写.tra...阅读全文

博文 2020-04-25 01:32:56 百里江山

leetcode_50

Golang: 思路:快速幂乘法,二分法的一种吧,对其他语言也许有边界上的要求,可是go,那真的是轻巧 代码如下: func myPow(x float64, n int) float64 { if n<0{ n=-n x=1/x } if n==1{ return x } if n==0{ return 1 } temp1:=myPow(x,n/2) temp2:=1.0 if n%2==1{ temp2=x } return temp1*temp1*temp2 ...阅读全文

博文 2020-03-23 14:33:02 淳属虚构

leetcode_384

Golang: 思路:实现不难,这里注意,go提供了库函数可以打乱数组,但这里依然使用了手写来实现 代码如下: type Solution struct { src []int } func Constructor(nums []int) Solution { return Solution{src:nums} } /** Resets the array to its original configuration and return it. */ func (this *Solution) Reset() []int { return this.src } /** Returns a random shuffling of the array. */ func (this *Soluti...阅读全文

博文 2020-04-04 14:32:51 淳属虚构

leetcode_1207

Golang: 思路:先对数组进行排序,然后计算每个元素出现了几次,存进map里,注意,这里map只是当作一个set来使用的,判断有没有出现重复而已。 代码如下: func uniqueOccurrences(arr []int) bool { if len(arr)<=1 { return true } sort.Ints(arr) m:=make(map[int]int) temp:=1 for i:=1;i阅读全文

博文 2020-02-19 15:32:51 淳属虚构

leetcode_41

Golang: 思路:这里补充个并查集实现,时间复杂度也是O(n),但空间复杂度会差很多,因为使用了哈希表。这题我陷入了个误区,忘记了使用题目给的数组空间是可以算作O(1)的,做的时候还在想,不用额外的空间,怎么可能呢? 代码如下: func firstMissingPositive(nums []int) int { mp:=make(map[int]int) for i:=0;i0{ if mp[nums[i]]==0{ temp:=mp[nums[i]-1]+mp[nums[i]+1]+1 mp[nums[i]-mp[nums[i]-1]],mp[nums[i]+mp[nums[i]+1]],mp[nums[i]]=temp,tem...阅读全文

博文 2020-03-17 09:32:46 淳属虚构

leetcode_36

Golang: 思路:这题很有趣的是,我看到的解法里,暴力法几乎是最优解,而其他的解法貌似最优,实则未必。 代码如下: func isValidSudoku(board [][]byte) bool { matrix:=make([][]int,27) for i,_:=range matrix{ matrix[i]=make([]int,9) } for i:=0;i阅读全文

博文 2020-03-23 14:33:03 淳属虚构

leetcode_811

Golang: 思路:这题是字符串处理吧,没啥好说的,但是这里我的代码需要精简一下,Count函数那里,有多余的时间复杂度。 代码如下: func subdomainVisits(cpdomains []string) []string { mp:=make(map[string]int) for _,v:=range cpdomains{ flds:=strings.Fields(v) count,_:=strconv.Atoi(flds[0]) mp[flds[1]]+=count temp:=flds[1] for strings.Count(temp,".")>0 { temp=temp[strings.Index(temp,".")+1:] mp[temp]+=count } } ...阅读全文

博文 2020-02-27 07:32:39 淳属虚构

leetcode_622

Golang: 思路:直接用数组实现了,感觉有点不太符合题意 代码如下: type MyCircularQueue struct { stack []int length int } /** Initialize your data structure here. Set the size of the queue to be k. */ func Constructor(k int) MyCircularQueue { return MyCircularQueue{ stack:[]int{}, length:k, } } /** Insert an element into the circular queue. Return true if the operation is succe...阅读全文

博文 2020-04-02 09:32:58 淳属虚构

leetcode_72

Golang: 思路:编辑问题算是DP中很经典的问题了 代码如下: func minDistance(word1 string, word2 string) int { if len(word1)==0||len(word2)==0{ return max(len(word1),len(word2)) } arr:=make([][]int,len(word1)+1) for k,_:=range arr{ arr[k]=make([]int,len(word2)+1) } for i:=0;i阅读全文

博文 2020-04-06 11:32:44 淳属虚构

第七章 九析带你轻松完爆 go - 循环语句

系列文章:总目录索引:九析带你轻松完爆 go 系列教程目录1 前言2 常规循环语句3 数据结构轮询的循环语句1 前言 如果你对博客有任何疑问或者想更深入学习 go,请加微信群,我们一起进步:2 常规循环语句 常规循环语句基本的语法形式就是 for 三段式,如下所示:package mainimport "fmt"func main() { for i := 0; i < 10; i++ { fmt.Println(i) }}3 数据结构轮询的循环语句 轮询数据结构很多时候是循环语句使用的场景之一。针对数据结构的轮询,经常使用到的循环语句是 for i, v range 格式,代码如下:package mainimport "fmt"func main() { s := "hello worl...阅读全文

博文 2020-02-29 23:33:11 九析

leetcode_692

Golang: 思路:topK问题,这题使用了堆 代码如下: type NodeW struct { word string fre int } func topKFrequent2(words []string, k int) []string { mp:=make(map[string]int) for _,v:=range words{ mp[v]++ } var nodes []*NodeW for k,v:=range mp{ node:=NodeW{ word:k, fre:v, } nodes=append(nodes,&node) } buildMinHeapK(nodes[:k]) for i:=k;inod...阅读全文

博文 2020-04-07 15:32:48 淳属虚构

leetcode_893

Golang: 思路:把奇数位和偶数位的字符全部找出来,然后排序在组合起来,建个map看下情况即可 代码如下: func superEggDrop(K int, N int) int { if K==1{ return N } mat:=make([][]int,K+1) for k,_:=range mat{ mat[k]=make([]int,N+1) } for k,_:=range mat[1]{ mat[1][k]=k } for i:=2;i<=K;i++{ for j:=1;j<=N;j++{ low,high:=1,j for low+1阅读全文

博文 2020-04-11 13:32:43 淳属虚构

leetcode_300

Golang: 思路:用一个数组arr,arr[i]表示以nums中以i为下标的元素所构成的最长上升子序列的长度,举个例子:[1,3,6,7,9,4,10,5,6],i=4时,即nums[i]=9,则arr[4]表示的是9作为最长上升子序列的最后一位时,这个序列的最大长度。最后,遍历这个数组arr,看下最大值,那么就是最长上升子序列的长度。 代码如下: func lengthOfLIS(nums []int) int { if len(nums)<=1 { return len(nums) } arr:=make([]int,len(nums)) arr[0]=1 res:=1 for i:=1;i阅读全文

博文 2020-02-20 19:33:15 淳属虚构

leetcode_68

Golang: 思路:刚开始看题会觉得有些麻烦,但实际上,也没啥技巧,就是处理字符串 代码如下: func fullJustify(words []string, maxWidth int) []string { var wordlist []string var res []string j,length:=0,0 for jmaxWidth{ //结束,处理wordlist handleWordList(wordlist...阅读全文

博文 2020-03-23 19:32:47 淳属虚构

在 Go 语言项目中使用 Travis CI

文链接:在 Go 语言项目中使用 Travis CI Travis CI 是一种免费的持续集成服务,而 持续集成(CI, Continuous integration) 是一种软件工程流程,概括来讲就是多提交小的 Commit 来更快的发现软件的 Bug,从而提高软件质量。 本文会详细介绍如何在 Go 语言项目中使用 Travis CI。 Travis CI logo 准备工作 GitHub 账号:用于保存项目。 Travis CI 账号:点击右上角的 Sign in with GitHub 即可通过 GitHub 创建关联账号。 示例项目 hello,它包含三个文件: hello.go: package hello func Hello() string { return "Hello, ...阅读全文

博文 2020-05-31 21:34:47 sulinehk

Go 语言单元测试实践

文链接:Go 语言单元测试实践 什么是软件测试? 软件测试是一个过程,该过程对软件(计算机程序)进行各种操作来发现软件错误。 为什么要进行软件测试? 进行软件测试可以帮助我们验证软件的各种功能正常,保证软件的正常工作从而提高软件质量。并且在实践中已被证明是颇有成效的。 测试驱动开发的由来: 一个从大量实践中得出的结论:人们发现在软件开发周期中,软件错误每进入到下一个阶段要修正它所付出的时间和人力会出人意表的翻上十倍。所以更早地进行软件测试可以更早地发现软件错误,从而大大减少后期修正的成本。后来又有人提出了测试驱动开发(TDD: Test-driven development),主体思想就是先编写测试程序,再实现程序功能。 下面就来介绍如何在 Go 语言中进行软件测试中较为重要的一环:单元测试...阅读全文

图解kubernetes调度器SchedulingQueue核心源码实现

SchedulingQueue是kubernetes scheduler中负责进行等待调度pod存储的对,Scheduler通过SchedulingQueue来获取当前系统中等待调度的Pod,本文主要讨论SchedulingQueue的设计与实现的各种实现, 了解探究其内部实现与底层源码,本系列代码基于kubernets1.1.6分析而来 SchedulingQueue设计 队列与优先级 队列与场景 类型 描述 通常实现 队列 普通队列是一个FIFO的数据结构,根据元素入队的次序依次出队 数组或者链表 优先级队列 优先级队列通常是指根据某些优先级策略,高优先级会优先被获取 数组或者树 其实在大多数的调度场景中,大多都是采用优先级队列来实现,优先满足优先级比较高的任务或者需求,从而减少后续高优...阅读全文

博文 2020-01-13 13:32:42 仔仔

leetcode_617

Golang: 思路:二叉树,用递归吧 代码如下: func mergeTrees(t1 *TreeNode, t2 *TreeNode) *TreeNode { if t1==nil&&t2!=nil{ return t2 }else if t1!=nil&&t2==nil{ return t1 }else if t1==nil&&t2==nil{ return nil }else{ return &TreeNode{ Val:t1.Val+t2.Val, Left:mergeTrees(t1.Left,t2.Left), Right:mergeTrees(t1.Right,t2.Right), } } ...阅读全文

博文 2020-04-01 11:33:20 淳属虚构

通俗易懂:说说 Python 里的线程安全、原子操作

首发于微信公众号:Python编程时光在线博客地址:http://python.iswbm.com/en/la... 在并发编程时,如果多个线程访问同一资源,我们需要保证访问的时候不会产生冲突,数据修改不会发生错误,这就是我们常说的 线程安全 。 那什么情况下,访问数据时是安全的?什么情况下,访问数据是不安全的?如何知道你的代码是否线程安全?要如何访问数据才能保证数据的安全? 本篇文章会一一回答你的问题。 1. 线程不安全是怎样的? 要搞清楚什么是线程安全,就要先了解线程不安全是什么样的。 比如下面这段代码,开启两个线程,对全局变量 number 各自增 10万次,每次自增 1。 from threading import Thread, Lock number = 0 def target...阅读全文

博文 2020-05-14 18:33:13 Python编程时光

leetcode_733

Golang: 思路:这题使用BFS,每找到一个元素,就染色,染完色后,下次就不会找到这个染过色的元素了。所以要注意一下,如果新染的颜色和原来一样,就不染了,直接返回即可。 代码如下: func floodFill(image [][]int, sr int, sc int, newColor int) [][]int { oldColor:=image[sr][sc] if newColor==oldColor{ return image } var stack [][]int stack=append(stack, []int{sr,sc}) for len(stack)!=0{ tr:=stack[0][0] tc:=stack[0][1] image[tr][tc]=newColor...阅读全文

博文 2020-02-27 07:32:39 淳属虚构

leetcode_819

Golang: 思路:这题的难点也在字符串的处理,但大部分的语言都提供类似的函数了,如果我们想提取字符串里的所有单词,使用正则是很好的途径,自己去分割字符串,处理标点符号,反而没什么意思。 代码如下: func mostCommonWord(paragraph string, banned []string) string { reg:=regexp.MustCompile("\\w+") mp1,mp2:=make(map[string]int),make(map[string]int) for _,v:=range banned{ mp1[v]=1 } if reg!=nil { strs:=reg.FindAllString(paragraph,-1) for _,v:=range s...阅读全文

博文 2020-02-27 09:32:41 淳属虚构

leetcode_637

Golang: 思路:二叉树,层序遍历即可 代码如下: func averageOfLevels(root *TreeNode) []float64 { var res []float64 if root!=nil{ stack:=[]*TreeNode{root} for len(stack)!=0{ level:=len(stack) num:=0 for i:=0;i阅读全文

博文 2020-04-01 09:33:04 淳属虚构

九种排序具体实现代码

声明:本文内容纯属博主自己查找和归纳的个人所需的知识点,仅作参考,如有错误,博主强烈希望您指出。如果您是某个知识点的原创博主,如有需要,可联系本人加上链接。本文内容会根据博主所需进行更新,希望大家多多关照。 直接插入排序 void InsertSort(int r[]) { int n = sizeof(r) / sizeof(r[0]); for(int i = 1; i < n; ++i) { for(int j = i - 1; j >= 0; --j) { if(r[j+1] < r[j]) { int s = r[j+1]; r[j+1] = r[j]; r[j] = s; } } } } 折半插入排序 void BinInsertSort(int r[]) { int n = s...阅读全文

博文 2020-04-08 09:32:49 DX3906

23. 一篇文章 说清楚 Go语言里的函数

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime 1. 关于函数 函数是基于功能或 逻辑进行封装的可复用的代码结构。将一段功能复杂、很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性。 在 Go 语言中,函数可以分为两种: 带有名字的普通函数 没有名字的匿名函数 由于 Go语言是编译型语言,所以函数编写的顺序是无关紧要...阅读全文

博文 2020-05-31 13:34:30 王一白

leetcode_343

Golang: 思路:这题以DP为思路,不算很难,以10为例子,我们知道结果是10=3+3+4这么拆分,如果我们假设res[i]表示i能拆分的正整数的最大乘积,那么如何计算res[10]呢?通过一个for循环,res[n]=res[i]*res[n-i],看看最大的res[n],即可。res[10]=res[3]*res[3]*res[4],实际上,也就是res[10]=res[3]*res[7] 代码如下: func integerBreak(n int) int { if n<=2 { return 1 } if n==3 { return 3 } arr:=make([]int,n+1) //从5开始,所有的乘数i都可以被分解了 for i:=0;i<=4;i++{ arr[i]=i ...阅读全文

博文 2020-02-22 15:32:49 淳属虚构

源码解读 Golang 的 sync.Map 实现原理

简介 Go 的内建 map 是不支持并发写操作的,原因是 map 写操作不是并发安全的,当你尝试多个 Goroutine 操作同一个 map,会产生报错:fatal error: concurrent map writes。 因此官方另外引入了 sync.Map 来满足并发编程中的应用。 sync.Map 的实现原理可概括为: 通过 read 和 dirty 两个字段将读写分离,读的数据存在只读字段 read 上,将最新写入的数据则存在 dirty 字段上 读取时会先查询 read,不存在再查询 dirty,写入时则只写入 dirty 读取 read 并不需要加锁,而读或写 dirty 都需要加锁 另外有 misses 字段来统计 read 被穿透的次数(被穿透指需要读 dirty 的情况)...阅读全文

博文 2020-03-23 14:37:37 张凯强zkqiang

如何在JavaScript中转换数据类型?

在JavaScript中,数据类型用于对一种特定类型的数据进行分类,确定可以分配给类型的值以及可以对其执行的操作。虽然由于类型强制,JavaScript会自动转换许多值,但为了达到预期的结果,通常最好在类型之间手动转换值。那么如何在JavaScript中转换数据类型?下面本篇文章就来给大家介绍一下,希望对大家有所帮助。 原文地址:如何在JavaScript中转换数据类型?JavaScript 变量可以转换为新变量或其他数据类型,分为两种情况:● 隐性转换:通过 JavaScript 自身自动转换● 显性转换:通过使用 JavaScript 函数进行转换隐性转换作为一种编程语言,javascript对意外值非常宽容。因此,JavaScript将尝试转换意外的值,而不是直接拒绝它们。这种隐性转换...阅读全文

博文 2020-03-25 23:32:43 yanghs

在 Go 语言项目中使用 Docker

文链接:在 Go 语言项目中使用 Docker 容器(Container) 将程序及其所需的任何内容捆绑在一起,包括依赖项、工具和配置文件等等。这样使得程序不受环境的干扰,真正意义上做到开发环境和生成环境完全一致。 而 Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。与传统虚拟机相比,Docker 也有许多优点,如:更高效的系统资源利用和更快速的启动时间。 在本文中,通过一个简单的 Go 语言项目,您将学习如何在 Go 语言项目中使用 Docker。 Golang and Docker logo 创建一个简单的 Go 语言项目 让我们来创建一个作为示例的 Go 语言项目。在命令行下输入以下命令以创建文件夹: mkdir gd...阅读全文

博文 2020-05-31 21:34:49 sulinehk

第六章 九析带你轻松完爆 go - 条件语句

系列文章:总目录索引:九析带你轻松完爆 go 系列教程目录1 前言2 基本条件语句3 复合条件语句4 条件块语句1 前言 如果你对博客有任何疑问或者想更深入学习 go,请加微信群,我们一起进步:2 基本条件语句 基本条件语句格式就是 if 格式,代码如下:package mainimport "fmt"func main() { i := 99 if i > 88 { fmt.Println("larger than 88") }}3 复合条件语句 复合条件语句格式是 if ... else ... 格式,代码如下:package mainimport "fmt"func main() { i := 66 if i > 88 { fmt.Println("larger than 88") }...阅读全文

博文 2020-02-29 22:33:11 九析

leetcode_143

Golang: 思路:链表,这题最简单的思路是,链表存进数组,然后一次性解决。再复杂一点就是,链表从中间分开,后半部分反转,然后再和前半部分依照特定规律合并。这里给简单思路,个人觉得这题没必要追求空间复杂度。 代码如下: func reorderList(head *ListNode) { node:=head if node==nil||node.Next==nil||node.Next.Next==nil{ return } var arr []*ListNode arr=append(arr, head) length:=1 for node.Next!=nil{ length++ node=node.Next arr=append(arr, node) } for i:=0;i阅读全文

博文 2020-03-11 13:33:07 淳属虚构

Golang 学习笔记:流程控制

条件语句 Go语言没有do-while语句,而for语句拥有更广泛的含义和用途switch语句也有进一步的扩展,支持类型判断和初始化子句等。 常见的流程控制的关键字有: defer:用于捕获异常和资源回收等工作 select:用于多支选择(配合通道使用) go:用于异步启动 goroutine 并执行特定函数 if判断语句 func main() { a := 15 if a < 20 { fmt.Println("a小于20") } //顺序执行 fmt.Println("a的值是", a) } if判断语句是最简单的判断,缺点在于无法返回false的情况,为了增加这一功能就要用到if-else语句。 if-else语句 func main() { a := 20 if a < 20 { ...阅读全文

博文 2020-06-03 13:32:42 sunlingbot

leetcode_623

Golang: 思路:还是通过层序遍历的方式来实现 代码如下: func addOneRow(root *TreeNode, v int, d int) *TreeNode { if d==1{ return &TreeNode{Left:root,Val:v} } if root!=nil{ stack:=[]*TreeNode{root} depth:=1 for depth阅读全文

博文 2020-04-02 09:32:58 淳属虚构

leetcode_347

Golang: 思路:topN问题,这里给出比较蠢一点的写法,时间复杂度应该为O(nlogn) 代码如下: type Ints [][]int func (s Ints) Len() int { return len(s) } func (s Ints) Less(i, j int) bool { if s[i][1] > s[j][1] { return true }else if s[i][1]==s[j][1]{ if s[i][0]阅读全文

博文 2020-04-05 20:33:05 淳属虚构

leetcode_1002

Golang: 思路:每个字符串进行比较即可 代码如下: func commonChars(A []string) []string { arr1:=make([]int,26) for k,w:=range A{ arr2:=make([]int,26) for _,b:=range w{ arr2[b-'a']++ } if k==0{ copy(arr1,arr2) }else{ for k,_:=range arr1{ arr1[k]=min(arr1[k],arr2[k]) } } } var res []string for k,v:=range arr1{ for i:=0;i阅读全文

博文 2020-04-15 09:32:45 淳属虚构

leetcode_725

Golang: 思路:这题是分配糖果的进阶篇,分配链表,这题为了实现简单,没那么在乎空间复杂度,因此最终结果空间复杂度效率较低,也算是在预期之内。 代码如下: func splitListToParts(root *ListNode, k int) []*ListNode { node1:=root var nodes []*ListNode for node1!=nil{ nodes=append(nodes,node1) node1=node1.Next } if len(nodes)阅读全文

博文 2020-04-07 15:32:48 淳属虚构

Go语言基础 - 变量与常量

一、标识符 标识符是程序员定义的具有特定含义名词,如常量名、变量名和函数名等等 Go语言的标识符组成成分:字母、数字和下划线_,并且只能以字母和_开头,如ab3,_ab3 二、关键字 Go语言中预先定义好的25个关键字: break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 以及37个保留字: Constants: true false iota nil Types: int int8 int16 int32 int64 uint uint8...阅读全文

博文 2020-04-07 15:32:42 不留烦