【Leetcode算法500题】目前B站最完整的数据结构算法教程,包含所有刷题攻略!这还没人看,我不更了!_哔哩哔哩_bilibili
70 爬梯子不能用递归,递归层数太多了,注意tmp
func ClimbStairs(n int) int {
if n == 1 {
return 1
} else if n == 2 {
return 2
} else {
f1 := 1
f2 := 2
for i := 3; i < n; i++ {
tmp := f1 + f2
f1 = f2
f2 = tmp
}
return f1 + f2
}
}
1、两数之和
①刚开始是返回值的问题:Go-missing return at end of function
报错原因:Go-missing return at end of function_weixin_30908103的博客-CSDN博客
一般意思是没有返回值,要用return
② 数组的声明形式,
A.最后返回的是int数组,当 a:=make([]int) 时会报错:invalid operation: make([]int) expects 2 or 3 arguments; found 1
此处是make的用(类型,内存,预留空间),报错需要2-3个参数,所以只要类型是不行的:go的make()的用法和参数含义_奋起的菜鸟_kk的博客-CSDN博客_go的make
要用在这里只能是 a:=make([]int,0),由于数组有自动扩充内容,所以0无所谓
B.关于数组的声明 ,自动推导类型[]内必须是整数且>0 Go语言中数组的声明与使用_sanqima的博客-CSDN博客_go 声明数组
a:=[2]int{1,2} => a = {1,2}
a:=[2]int => a = {0,0}
但是如果这样!就会自动填充0!!
综上所述,在数组定义时如果没有初始内容,最好不用自动推导类型, var a []int
题解:利用哈希表,为了避免结果重复,只能在遍历的时候生成哈希表
func twoSum(nums []int, target int) []int {
stoMap := make(map[int]int, 4)
a := make([]int, 0)
for i := 0; i < len(nums); i++ {
other := target - nums[i]
_, ok := stoMap[other]
if ok == true {
a = append(a, stoMap[other], i)
} else {
stoMap[nums[i]] = i
}
}
return a
}
88、合并两个有序数组
刚开始想到的是双指针,但是go里指针好像不能移动,有点凝固,然后在评论区里参考了一下这位朋友的方法
执行过程中:
刚开始在m1、n2 等于0的条件思路有点混乱,所以在第42个实例好像是,关于输入[0] ,[1]的时候报错很多很多次,结果不正确,还有报错过,超出列表范围(因为没有单写m1<0的情况,而是和第二个else if 合在一起了,所以进入循环的时候会有nums[-1],报错超出列表的范围,一定要注意)
func merge(nums1 []int, m int, nums2 []int, n int) {
m1 := m - 1
n2 := n - 1
k := m + n - 1
for n2 >= 0 && m1 >= 0 {
if nums1[m1] > nums2[n2] {
nums1[k] = nums1[m1]
k--
m1--
} else if nums1[m1] < nums2[n2] {
nums1[k] = nums2[n2]
k--
n2--
} else {
nums1[k] = nums1[m1]
nums1[k-1] = nums2[n2]
k = k - 2
m1--
n2--
}
}
if m1 < 0 {
for n2 >= 0 {
nums1[k] = nums2[n2]
k--
n2--
}
}
}
283、移动零
在这儿尝试了一下有两个小小问题:
①循环体里声明的变量只能在循环体里使用,刚开始 i 定义在for里,j循环的时候报错没有i
后来查了一下for里变量的作用域,详情见golang for循环体中创建的变量的作用域_张康佳的博客-CSDN博客_golang 循环里面新建变量
② for 后面的形式,因为 i 定义了,就想偷个懒 for i 后来确定了一下果然只有三种形式,第一个就是for,第二个三个条件全有,第三个就是这种 ③ 本来想nums[j++] = nums[i++]省点事儿,报错 unexpected ++, expecting : 自增只能自己一行,不然报错 unexpected ++ 这道里有一点点晕乎,利用取反和两个遍历,有两个地方注意一下 ① 刚开始傻了想了半天取反的办法还查了文档函数,就-1*a就行 ②第一个for中元素判断的问题,这儿感觉写的有点笨了,后面还会看看能不能优化一下 有两个情况要注意一下,一个是之前已经把 nums[i] 变成负数了,这时候要判断 一个是如果存在重复元素,再变换就会负负得正,所以还要再判断一下 稍有不注意就 index out of range 还要注意一下,最后加入数组的是j+1,没有变化的元素下标+1才是所求 欢迎分享,转载请注明来源:内存溢出
448、找到所有数组中消失的数
func moveZeroes(nums []int) {
if nums == nil{
return
}
j:=0
var i int
for i = 0;i
func findDisappearedNumbers(nums []int) []int {
var a []int
for i:=0;i
评论列表(0条)