作者:看那个码农
公众号:看那个码农
上期内容介绍了Go语言学习之排序算法(快速、堆、希尔)|Go主题月
- 快速排序
- 堆排序
- 希尔排序
本篇内容将继续带领大家走进Go语言的世界。
1.本文简介
Go语言学习之数组
2.数组的定义
数组是一段固定长度的连续内存区域,是一个数据集合,在编程中它通常按逻辑对数据进行分组。
在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组的大小不能变化。
3.数组的声明
数组的声明写法如下
var 数组变量名 [元素数量]T
- 数组变量名:数组声明及使用时的变量名字。
- 元素数量:数组的元素数量。可以是一个表达式。
- T可以是任意基本类型。
例如下面的例子
var node [2]string
对这行代码的解读如下:
- 使用关键字var声明了一个名为node的变量
- 将一个长度为2的数组赋给这个变量。
- 这个数组的类型为字符串。
声明数组变量后,便可以将字符串赋给数组的元素了
node[0]="First”
node[1]="Second"
例如下面这串代码:
package main
import (
"fmt"
)
func main(){
var node [2]string
node[0]="First"
node[1]="Second"
fmt.Println(node[0])
fmt.Println(node[1])
}
输出为
4.初始化数组
数组可以在声明时使用初始化列表进行数组设置,
具体如下面代码所示
var node=[2]string{"First","Second"}
这种方式编写时候,需要保证大括号后面的元素数量与数组的大小一致。
但是一般情况下这个过程可以交给编译器,编译器在编译的时候,可以根据元素个数确定数组大小。
例如下面这个案例
package main
import (
"fmt"
)
func main(){
var node=[...]string{"First","Second"}
fmt.Println(node[0])
fmt.Println(node)
}
输出为
5.遍历数组元素
通常使用for循环来遍历数组元素
例如下面的案例
package main
import (
"fmt"
)
func main(){
var node=[...]string{"First","Second"}
for i,j:=range node{
fmt.Println(i,j)
}
}
输出为
6.数组的一道典型案例
刚看完数组的基础知识,我们马上上手一道剑指Offer来实际操作一下
例如下面这题:剑指 Offer 03. 数组中重复的数字
1.题目描述
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制: 2 <= n <= 100000
2.思路分析
- 题目限制了 n 的区间为[2,100000],
- nums 里的所有数字都在 0~n-1 的范围内,即 nums 是小于 n 的正整数。
- 可以用一个长度为 n 的 bool 数组存储数字是否出现过,每一个数字都判断是否已经出现过(即将该数字作为 bool 数组的下标判断值是否为 true),
- 如果出现过则直接返回该数字(已经出现过再次出现就是重复了),否则将该数字作为 bool 数组的下标,将 bool 数组值设置为 true,标记该数字已出现过。
3.完整代码
package main
import (
"fmt"
)
func findRepeatNumber(nums [5]int) int {
var sign [100000]bool
for _,v := range nums{
if sign[v]{
fmt.Printf("题目所要求找的数值为:%v",v)
}
sign[v] = true
}
return 0
}
func main(){
var node=[5]int{1,2,3,1,5}
fmt.Printf("完整数组为:%v\n",node)
findRepeatNumber(node)
}
输出为
如果你觉得这篇内容对你有帮助的话:
1、点赞支持下吧,让更多的人也能看到这篇内容
2、关注公众号:看那个码农,我们一起学习一起进步。
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情