「这是我参与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)
}
运行结果
参数数组
向函数传递数组参数时可以在函数声明时就限定数组长度
案例中的方法声明时并未限制数组的长度,但其实可以限定数组的长度
func twoSum(nums []int, target int) []int {} //未限定
func twoSum(nums [6]int, target int) []int {} //限定数组最长为6
你以为结束了
小问题:数组的循环有几种方式?都有什么区别? 下一篇就讲,敬请期待
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!