[leetcode] 718. Maximum Length of Repeated Subarray
743
2022-08-19
go语言的内置容器 数组(go语言 package)
数组的概念
数组是相同类型的一组数据构成的长度固定的序列,其中数据类型包含了基本数据类型、复合数据类型和自定义类型。数组中的每一项被称为数组的元素。数组名是数组的唯一标识符, 数组的每一个元素都是没有名字的,只能通过索引下标(位置)进行访问。因为数组的内存是一段连续的存储区域,所以数组的检索速度是非常快的,但是数组也有一定的缺陷,就是定义后长度不能更改。
数组的语法
Go 语言数组声明需要指定元素类型及元素个数,语法格式如下。
var 变量名 [数组长度] 数据类型
以上为一维数组的定义方式,数组长度必须是整数且大于 0,未初始化的数组不是nil,也就是说没有空数组(与切片不同)。
初始化数组语法格式如下。
var nums = [5]int{1,2,3,4,5}
初始化数组中 {} 中的元素个数不能大于 [] 中的数字。
如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小。可以忽略声明中数组的长度并将其替换为…。编译器会自动计算长度。语法格式如下。
var nums = [...]int{1,2,3,4,5}
以上两种初始化方式相同,虽然第二种没有设置数组的大小。
修改数组内容,语法格式如下。
nums[4] = 4
以上实例读取数组第五个元素。数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。
数组的长度
数组的长度是该数组类型的一个内置常量,通过将数组作为参数传递给len()函数,可以获得数组的长度。忽略声明中数组的长度并将其替换为…,编译器可以找到长度。接下来使用案例演示获取数组长度的使用方式。
示例代码
package main
import "fmt"
func main() {
a := [4]float64{67.7, 89.8, 21, 78}
b := [...]int{2, 3, 5}
fmt.Printf("数组a 的长度为 %d, 数组b的长度为 %d\n", len(a), len(b))
}
运行
数组a 的长度为 4, 数组b的长度为 3
遍历数组
在数组中查找目标元素,需要进行遍历,在Go语言中数组的遍历方式如下所示。
package main
import "fmt"
func main() {
a := [4]float64{67.7, 89.8, 21, 78}
b := [...]int{2, 3, 5}
//遍历数组方式1
for i := 0; i < len(a); i++ {
fmt.Print(a[i], "\t")
}
fmt.Println()
// 遍历数组方式2
for _, value := range b {
fmt.Print(value, "\t")
}
}
运行
67.7 89.8 21 78
2 3 5
多维数组
由于数据的复杂程度不一样,数组可能有多个下标。一般将数组元素下标的个数称为维数,根据维数,可将数组分为一维数组、二维数组、三维数组、四维数组等。二维及以上的数组可称为多维数组。
Go 语言的多维数组声明方式:
var variable [size1][size2]...[sizen] variable_type
二维数组
在实际应用中,仅仅使用一维数组是不够的,例如,一个学习小组有10个人,每人有三门课的考试成绩,这时,一位数组明显不够用,就可以使用二维数组。
二维数组是最简单的多维数组,二维数组的本质也是一个一维数组,只是数组成员,由基本数据类型变成了构造数据类型(一维数组)。
二维数组的定义方式
var arrayName [x][y] variable_type
二维数组初始化,语法格式
a = [3][4]int{
{0, 1, 2, 3}, //第一行索引为 0
{4, 5, 6, 7}, //第二行索引为 1
{8, 9, 10, 11} //第三行索引为 2
}
在上述定义的二维数组中,共包含3*4个元素,即12个元素。接下来,通过一张图来描述二维数组a的元素分布情况,如图所示。
二维数组通过指定坐标来访问。如数组中的行索引与列索引。语法格式如下。
int val = a[2][3]
以上实例访问了二维数组 val 第三行的第四个元素。
二维数组可以使用循环嵌套来输出元素,具体语法通过案例演示
package main
import "fmt"
func main() {
/* 数组 - 5 行 2 列*/
var a = [5][2]int{ {0,0}, {1,2}, {2,4}, {3,6},{4,8}}
fmt.Println(len(a))
fmt.Println(len(a[0]))
/* 输出数组元素 */
for i := 0; i < len(a); i++ {
for j := 0; j < len(a[0]); j++ {
fmt.Printf("a[%d][%d] = %d\n", i,j, a[i][j] )
}
}
}
运行
5
2
a[0][0] = 0
a[0][1] = 0
a[1][0] = 1
a[1][1] = 2
a[2][0] = 2
a[2][1] = 4
a[3][0] = 3
a[3][1] = 6
a[4][0] = 4
a[4][1] = 8
三维数组
三维数组的本质也是一个一维数组,只是数组成员,由基本数据类型变成了构造数据类型(二维数组)。如同阅兵仪式的多个方阵。
定义三维数组的语法格式如下。
var threedim [5][10][4]in
多维数组在实际的工作中极少使用,并且使用方法与二维数组相似
数组是值类型
Go语言中的数组并非引用类型,而是值类型。当它们被分配给一个新变量时,会将原始数组复制出一份分配给新变量。因此对新变量进行更改,原始数组中不会有反映。下面通过一个案例来验证原始数组是否被更改,具体如下所示
package main
import "fmt"
func main() {
a := [...]string{"USA", "China", "India", "Germany", "France"}
b := a // a copy of a is assigned to b
b[0] = "Singapore"
fmt.Println("a :", a)
fmt.Println("b :", b)
}
运行
package main
import "fmt"
func main() {
a := [...]string{"USA", "China", "India", "Germany", "France"}
b := a // a copy of a is assigned to b
b[0] = "Singapore"
fmt.Println("a :", a)
fmt.Println("b :", b)
}
当将数组传递给函数作为参数时,它们将通过值传递,原始数组依然保持不变。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~