「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。
生命不息,学习不止
题外话
项目更新,技术栈发生改变,改用go写业务啦,不想乏味的看书,看视频学语言,不如直接刷算法,在算法里学,路漫漫啊……
废话不多说,上货
LeetcCode-1
两数之和
刷过LeetCode都知道这题,入门级,但是我们的目的不只有做题,还有学习语言
题目如下:
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6 输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6 输出:[0,1]
是不是看上去很简单,那我们就拿go来写一下吧
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[:] //返回数组
}
保姆式注解让你一眼就能看懂
运行结果如下
别看只是单纯的暴力循环,虽然效率是差了点,但咱们的核心目的是学习语言,那就开始吧
创建函数
函数是基本的代码块,用于执行一个任务, Go 语言函数定义格式如下:
func function_name( [parameter list] ) [return_types] {
函数体
}
函数定义解析:
- func:函数由 func 开始声明
- function_name:函数名称,参数列表和返回值类型构成了函数签名。
- parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
- return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
- 函数体:函数定义的代码集合。 我们就拿
func twoSum(nums []int, target int) []int {}
来说
twoSum 是方法的名称
nums []int, target int 分别是函数的两个参数,一个是数组,一个是int类型
[]int 则是返回值的类型,是一个数组类型
函数的调用
当创建函数时,你定义了函数需要做什么,通过调用该函数来执行指定任务。
调用函数,向函数传递参数,并返回值
本例中就可以在main函数中调用该函数
func main() {
arr := []int{3, 2, 4}
result := twoSum(arr, 6)
fmt.Print(result[0])
fmt.Print(result[1])
}
arr 和 6 就是对应的参数,result就是返回的数组
函数的多个返回值
go的函数还有一个优点,就是可以有多个返回值,举个例子
func twoSum(nums []int, target int) (int firnum,int secnum)
我可以将本例中返回值是数组的形式,直接改成返回两个数字,接收方式如下
a,b:=twoSum(nums, target)
你以为结束了
小问题:函数在传参是分为值传递和引用传递,go中是如何体现的? 下一篇就讲,敬请期待
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!