Go语言学习之数组|Go主题月

444 阅读3分钟

作者:看那个码农

公众号:看那个码农

上期内容介绍了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])
}

输出为

image.png

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)
}

输出为

image.png

5.遍历数组元素

通常使用for循环来遍历数组元素

例如下面的案例

package main

import (
   "fmt"
)

func main(){
   var node=[...]string{"First","Second"}

   for i,j:=range node{
      fmt.Println(i,j)
}
}

输出为

image.png

6.数组的一道典型案例

刚看完数组的基础知识,我们马上上手一道剑指Offer来实际操作一下

例如下面这题:剑指 Offer 03. 数组中重复的数字

1.题目描述

找出数组中重复的数字。

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

输入:
[2, 3, 1, 0, 2, 5, 3]
输出:23 

限制: 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)
}

输出为

image.png

如果你觉得这篇内容对你有帮助的话:

1、点赞支持下吧,让更多的人也能看到这篇内容

2、关注公众号:看那个码农,我们一起学习一起进步。

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情