go语言循环求和 go语言 循环

leetcode:Two Sum求和系列近期正在学习go语言 , 闲暇时间写点leetcode,正好当作熟悉语法,锻炼思路 。有些类似的题目,也做些总结和思考 。很久以前就特别佩服那些写技术博客的,一直都是懒性子,总算是让自己迈开了第一步,第一篇技术博客,算法、工程、生活,希望自己能多总结,加油!
leetcode No1:
题目的意思是 , 一个数组,找到其中两个数,和为某个给定的值 。
直接两层for循环,时间复杂度是O(n^2),空间复杂度是O(1) 。
时间复杂度是O(n),空间复杂度是O(n)
顺道附上java版本的解法:
leetcode No167:
这个题也完成可以按照上面leetcodeNo1的hashmap的解法,这种实际上并没有利用上这个是有序数组的优势 。
go版本实现:
java版本的实现:
leetcode No653:
空间复杂度O(n),时间复杂度O(n)
Golang入门到项目实战 | golang for循环语句go语言中的for循环,只有for关键字 , 去除了像其他语言中的while和do while.
注意:for表达式不用加括号
循环输出1到10
运行结果
初始条件,可以写到外面
运行结果
初始条件和结束条件都可以省略
运行结果
这种情况类似其他语言中的while循环
永真循环
运行结果
for循环可以通过break、goto、return、panic语句强制退出循环 。
go语言循环队列的实现队列的概念在 顺序队列 中,而使用循环队列的目的主要是规避假溢出造成的空间浪费,在使用循环队列处理假溢出时,主要有三种解决方案
本文提供后两种解决方案 。
顺序队和循环队列是一种特殊的线性表,与顺序栈类似,都是使用一组地址连续的存储单元依次存放自队头到队尾的数据元素,同时附设队头(front)和队尾(rear)两个指针,但我们要明白一点,这个指针并不是指针变量,而是用来表示数组当中元素下标的位置 。
本文使用切片来完成的循环队列,由于一开始使用三个参数的make关键字创建切片,在输出的结果中不包含nil值(看起来很舒服),而且在验证的过程中发现使用append()函数时切片内置的cap会发生变化 , 在消除了种种障碍后得到了一个四不像的循环队列 , 即设置的指针是顺序队列的指针 , 但实际上进行的操作是顺序队列的操作 。最后是对make()函数和append()函数的一些使用体验和小结,队列的应用放在链队好了 。
官方描述(片段)
即切片是一个抽象层,底层是对数组的引用 。
当我们使用
构建出来的切片的每个位置的值都被赋为interface类型的初始值nil , 但是nil值也是有大小的 。
而使用
来进行初始化时 , 虽然生成的切片中不包含nil值,但是无法通过设置的指针变量来完成入队和出队的操作,只能使用append()函数来进行操作
在go语言中,切片是一片连续的内存空间加上长度与容量的标识,比数组更为常用 。使用 append 关键字向切片中追加元素也是常见的切片操作
正是基于此,在使用go语言完成循环队列时,首先想到的就是使用make(type, len, cap)关键字方式完成切片初始化,然后使用append()函数来操作该切片,但这一方式出现了很多问题 。在使用append()函数时,切片的cap可能会发生变化,用不好就会发生扩容或收缩 。最终造成的结果是一个四不像的结果,入队和出队操作变得与指针变量无关,失去了作为循环队列的意义 , 用在顺序队列还算合适 。
参考博客:
Go语言中的Nil
Golang之nil
Go 语言设计与实现

推荐阅读