funcminSubArrayLen(target int, nums []int)int { sum , ans := 0,len(nums)+1//ans不会出现比数组长度还大的结果,所以初始化为len+1就很合适! i,j := 0,0 for ;j<len(nums);j++ { sum += nums[j] for target <= sum { l := j - i + 1 //避免了写min函数的定义 if ans > l{ //取最小值,写的时候写反惹(哽住) ans = l } sum -= nums[i] i++ } } if ans == len(nums)+1 { return0 } return ans }
funcgenerateMatrix(n int) [][]int { startx , starty := 0,0 //对整型的赋值! var mid int = n/2 var loop int = n/2 offset := 1 counts := 1 //声明 a := make([][]int,n) //完成对int[][]的初始化 for i:=0;i<n;i++{ a[i] = make([]int,n) } for loop >0{ i,j := startx,starty //注意:该处不应该使用短变量声明:= ,因为我们要将j的值带出下列的函数体 for j = starty;j < n-offset ; j++{ a[startx][j] = counts counts++ } for i = startx ; i < n-offset;i++{ a[i][j] = counts counts++ } for ;j>starty;j--{ a[i][j] = counts counts++ } for ;i> startx;i--{ a[i][j] = counts counts++ } startx++ starty++ loop-- //别写错惹 offset++ } //不要漏了 if(n%2 ==1 ){ a[mid][mid] = counts } return a }
【算法总结】
双指针注意不要混淆左右指针的用途
涉及数组修改,可以考虑将值存储到新的数组里面,而不是在原数组的基础上修改
滑动窗口注意不要混淆初始指针和新增指针的用途
比较最小值时可以考虑将res初始化为len(nums)+1,因为值都不会比len(nums)+1大
螺旋数组需要分清每个变量的用途,清晰的控制数组边缘,while循环里面的每个变量要清楚其作用范围
【语言总结】
//声明
a := make([][]int,n)
//对整型的赋值!
var mid int = n/2
var loop int = n/2
//注意:该处不应该使用短变量声明:= ,因为我们要将j的值带出下列的函数体
for j = starty;j < n-offset ; j++{
a[startx][j] = counts
counts++
}