golang

【Golang】LeetCode442Find All Duplicates in an Array

寵の児 提交于 2019-12-16 00:03:06
给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗? 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [2,3] 题意:关键就是把数组中的元素当成是索引来看就行。如果索引处的数字出现过一次,就给 -1,因为只会出现两次,如果第二次再出现,那么对应位置的值就会是小于0的,直接加到结果集中就行。一开始我还想着出现过一次 -1,再出现一次再*-1,这样最后再遍历一次找到小于0的即可,但是发现有些问题,有些数字没出现过会被误杀。 O(N)时间,O(1)空间 func findDuplicates(nums []int) []int { result := make([]int, 0) for _, v := range nums { v = int(math.Abs(float64(v))) if nums[v-1] > 0 { nums[v-1] = nums[v-1] * -1 } else { result = append(result, v) } } return result } 来源: 51CTO 作者: 努力的C 链接: https://blog.51cto.com/fulin0532/2432452

golang之结构体使用注意事项和细节

雨燕双飞 提交于 2019-12-15 23:59:09
1. 结构体的所有字段在内在中是连续的 2. 结构体是用户单独定义的类型,和其它类型进行转换时需要有完全相同的字段(名字、个数和类型) 3. 结构体进行type重新定义(相当于取别名),Golang认为是新的数据类型,但是相互间可以强转 4. struct的每个字段上,可以写上一个tag,该tag可能通过反射机制获取,常见的使用场景就是序列化和反序列化. 来源: https://www.cnblogs.com/xiangxiaolin/p/12046672.html

leetcode 回溯题目 golang语言

纵饮孤独 提交于 2019-12-15 23:56:33
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就 “回溯” 返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为 “回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。 回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。 链接:https://leetcode-cn.com/tag/backtracking/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 本文主要总结一下回溯算法的一些题目。语言主要是Golang。 78.子集,不含重复元素 第一种是比较常规的回溯解法。 func subsets(nums []int) [][]int { result := make([][]int, 0) subsetsBT(&result, nums, []int{}, 0) return result } func subsetsBT(result *[][]int, nums []int, temp []int, start int) { //此处深拷贝temp

【golang - 关键词】package 、import

人盡茶涼 提交于 2019-12-15 11:47:52
1. package 1.1 package特性 一个目录下的同级文件归属一个包。 包名可以与其目录不同名。 同目录文件,虽然package包名可与目录不同,但是所有的同目录文件必须是相同的包名 包名为 main 的包为应用程序的入口包,编译源码没有 main 包时,将无法编译输出可执行的文件。 2. import 2.1 import规则 标准库查找 import( “fmt” ) 这个fmt是Go语言的标准库,是去GOROOT下去加载该模块 相对路径查找 import “./model” //当前文件同一目录的model目录,但是不建议这种方式import 绝对路径查找 import “shorturl/model” //加载GOPATH/src/shorturl/model模块 别名操作 import( f “fmt” ) 别名操作调用包函数时前缀变成了重命名的前缀,即f.Println(“hello world”) 点操作 import( . “fmt” ) 其中 . 的作用为:省略前缀的包名。 也就是前面你调用的fmt.Println(“hello world”) 可以省略的写成Println(“hello world”) _操作 import ( “database/sql” _ “github.com/ziutek/mymysql/godrv” )

golang格式化代码(大道至简)

大憨熊 提交于 2019-12-15 05:13:36
golang有一个gofmt工具,用来格式化代码,有多种用法。正所谓“大道至简”,我们这里只介绍一种,最实用的命令 gofmt -w -l src ,src是项目目录。 -l 显示那些需要格式化的文件 -w 把改写后的内容直接写入到文件中,而不是作为结果打印到标准输出。 -r 添加形如“a[b:len(a)] -> a[b:]”的重写规则,方便我们做批量替换 -s 简化文件中的代码 -d 显示格式化前后的 diff 而不是写入文件,默认是 false -e 打印所有的语法错误到标准输出。如果不使用此标记,则只会打印不同行的前 10 个错误。 -cpuprofile 支持调试模式,写入相应的 cpufile 到指定的文件 来源: CSDN 作者: 前端_刘洪瑞 链接: https://blog.csdn.net/qq_21821091/article/details/103455419

leetcode 139.单词拆分 golang实现

旧巷老猫 提交于 2019-12-15 01:12:39
描述 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1: 输入: s = "leetcode", wordDict = ["leet", "code"] 输出: true 解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。 示例 2: 输入: s = "applepenapple", wordDict = ["apple", "pen"] 输出: true 解释: 返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。 注意你可以重复使用字典中的单词。 示例 3: 输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"] 输出: false 思路 动态规划 1. 找公式 dp[i] 表示字符串i 是否满足拆分条件 如果可以拆分 即dp[i] = true 则拆分为两个字符串 s[0:j] s[j:i] 很明显s[0:j] 也需要可以拆分 即满足dp[j] = true s[j:i]是字典里的单词即可 公式即为 dp[i] = dp[j] && s

在Go里使用OpenCL,"下雨天压榨GPU更配哦"

可紊 提交于 2019-12-14 19:05:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原文标题: 能在Go里用GPU运算的OpenCL语言绑定包 首先网页访问 https://github.com/pseudomind/go-opencl/ 了解一下,然后下载它 C:\ go \src\src> go get github.com/pseudomind/ go -opencl/cl 再搜索一下你的 OpenCL.dll 文件,把它复制到gcc编译器的lib目录里 比如我在c盘搜索出 opencl.dll ,把它复制到了 C:\TDM-GCC-32\lib\ 里 用LiteIDE打开 https://github.com/pseudomind/go-opencl/tree/master/examples/clinfo 里面的例子,可以 run 了 examples/rotate 里面的例子,要build后,在cmd窗口下运行,是一个旋转图片的例子,需要一张png格式的图片.使用方法输入 rotate.exe -h 并回车 你可以想象, CPU+GPU 协作 会有多快. 未来的操作系统都将采用这种技术加速自身的运行速度 地球上目前最快的hash码匹配破解软件名为 oclHashcat ,软件就是用GPU参与运算 还有用GPU运算的 Photoshop 同类软件,叫 Musemage

[翻译] effective go 之 Functions

纵然是瞬间 提交于 2019-12-13 18:35:41
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Functions Multiple return values 返回多个值 One of Go's unusual features is that functions and methods can return multiple values. This form can be used to improve on a couple of clumsy idioms in C programs: in-band error returns (such as -1 for EOF) and modifying an argument. Go的函数和方法可以同时返回多个值 这个特性可以改善C程序中的不太理想的多值返回形式 -- 参数传入指针 通过这个指针来修改参数 另外再返回一个值 比如-1 或者EOF In C, a write error is signaled by a negative count with the error code secreted away in a volatile location. In Go, Write can return a count and an error: “Yes, you wrote some bytes but not all of them

golang常用类型转换

醉酒当歌 提交于 2019-12-13 09:46:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> int转string strconv.Itoa(_port) string转int // string转换成int strInt, err := strconv.Atoi(str) // string转换成int64 strInt64, _ := strconv.ParseInt(str, 10, 64) // string转换成int32 strInt32, _ := strconv.ParseInt(str, 10, 32) // 这里strInt32实际上还是int64类型的,只是截取了32位,所以最终还是要强转一下变成int32类型,如果不强转成int32是会编译报错的 var realInt32 int32 = 0 realInt32 := int32(strInt32) string转byte[] var byteArr []byte = []byte(str) byte[] 转string string(urlsJson[:]) array 转json字符串 urlsJson, _ := json.Marshal(finalResult) json字符串转array json.Unmarshal([]byte(s), &array) json相关转换参考: https://www.kancloud

Concurrency In Golang

雨燕双飞 提交于 2019-12-12 18:22:48
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Yesterday, I answered a question in Quora about the concurrency model in Go. Now, I feel like I want to say more!! Concurrency in Golang is one of the most powerful features in the language. Numerous folks covered the topic, ranging in their takes from very simple to overly complicated. Today, it’s my turn to give my two cents. Concurrency in Golang is a way of thinking more than just syntax. In order to harness the power of Go , you need to first understand how Go approaches concurrent execution of code. Go relies on a concurrency model called CSP (