跟着算法学GO(3)

140 阅读3分钟

「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战

生命不息,学习不止

题外话

啊,已经有同事回家了,我也想回家,可恶的疫情让我住的地方变成风险区了,我愿用我身上20斤肉换世界没有疫情,要是还不行就三十斤,毕竟咱有这个条件!!!

在这里插入图片描述

废话不多说,上货

在这里插入图片描述

LeetcCode-1

两数之和

还是这道题,因为还有东西没有说完。

题目如下:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

go实现算法

func twoSum(nums []int, target int) []int {
	result := [2]int{}  //初始化一个数组
	for i := 0; i < len(nums); i++ {   //循环
		for j := len(nums) - 1; j > i; j-- {
			if nums[i]+nums[j] == target {
				result[0] = i  //按照索引为数组赋值
				result[1] = j
				break          //中断
			}
		}
	}
	return result[:]   //返回数组
}

小问题回顾

算法中数组创建方式有几种?都有什么不同?适用于什么场景?

数组声明与初始化

我们先来说一下数组基础

声明数组时采用 var xxx[size] type 这种格式来声明一个数组。列如

var arr[5] int 

这样就声明了一个长度为5的int类型的一维数组

数组可在声明时直接初始化,例如

var arr = [2]string{'sd','asd'}

这样就初始化了一个字符型的一维数组

也可以采用我再算法实现中这种方式来初始化一个数组,如下

result := [2]int{}

当不确定数组长度时,可以用...代替数组长度,例如

balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

编译器会根据元素个数自行推断数组的长度

多维数组

多维数组和一维数组的声明差不多,例如

var xxx[2][1]int 
var xxxx[3][4][5]float 

访问方式仍然可以采用索引的方式访问

当我们想创建维度不同的多维数组,仍然可以使用...的方式,例如

balance := [...][]float32{{1000.0, 2.0, 3.4, 7.0, 50.0}, {111.1}}

还可以使用append()方法将不同长度的数组添加到多维数组中,案例如下

package main

import "fmt"

func main() {
	// 创建空的二维数组
	ans := [][]string{}

	// 创建一维数组,各数组长度不同
	row1 := []string{"fish", "shark", "eel"}
	row2 := []string{"bird"}

	// 使用 append() 函数将一维数组添加到二维数组中
	ans = append(ans, row1)
	ans = append(ans, row2)

	// 循环输出

	fmt.Println(ans)
}

运行结果

截图_20221727061723.png

参数数组

向函数传递数组参数时可以在函数声明时就限定数组长度

案例中的方法声明时并未限制数组的长度,但其实可以限定数组的长度

func twoSum(nums []int, target int) []int {}     //未限定
func twoSum(nums [6]int, target int) []int {}    //限定数组最长为6

你以为结束了

小问题:数组的循环有几种方式?都有什么区别? 下一篇就讲,敬请期待

在这里插入图片描述

大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划! 在这里插入图片描述