LeetCode Practice Journal | Day2_数组(go)
3、leetcode 977(有序数组的平方)
引用文本
1.题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
代码
// go
func sortedSquares(nums []int) []int {
len:= len(nums)
left :=0
right := len-1
k := len-1
res := make([]int,len)
for left<=right{
if nums[left]*nums[left]<nums[right]*nums[right]{
res[k] =nums[right]*nums[right]
right--
}else {
res[k] = nums[left]*nums[left]
left++
}
k--
}
return res
}
// func sortedSquares(nums []int) []int{
// ans := make([]int,len(nums))
// for i,v := range nums{
// ans[i] = v*v
// }
// sort.Ints(ans)
// return ans
// }
4、leetcode 209(长度最小的子数组)
引用文本
1.题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
注意滑动窗口解题思路,滑动窗口的终止位置,达到条件后开始缩起止位置
滑动窗口和暴力代码
// 暴力
func minSubArrayLen(target int,nums []int) int{
len:=len(nums)
minlen:= math.MaxInt64
cursum :=0
i:=0
for j:=0;j<len;j++{
cursum+=nums[j]
for cursum>=target {
minlen= min(minlen,j-i+1)
cursum = cursum-nums[i]
i++
}
}
if minlen!=math.MaxInt64{
return minlen
}else{
return 0
}
}
//暴力
// func minSubArrayLen(target int, nums []int) int {
// len := len(nums)
// minlen:=math.MaxInt64
// for i:=0;i<len;i++{
// cursum:=0
// for j:=i;j<len;j++{
// cursum += nums[j]
// if cursum>=target{
// minlen = min(minlen,j-i+1)
// }
// }
// }
// if minlen!=math.MaxInt64{
// return minlen
// }else{
// return 0
// }
// }
func min(a int, b int) int{
if a<b{
return a
}else{
return b
}
}
5、leetcode 59.螺旋矩阵II
引用文本
1.题目链接:https://leetcode.cn/problems/spiral-matrix-ii/
2、代码随想录:https://programmercarl.com/0059.%E8%9E%BA%E6%97%8B%E7%9F%A9%E9%98%B5II.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
注意边界条件
注意go里面二维切片初始化方式!!!
a := make([][]int, 0, 100)
for i:=0; i < 100; i++ {
a[i] = make([]int, 0, 100)
}
两种不同边界条件的模拟方法
// 模拟过程
func generateMatrix(n int) [][]int {
res := make([][]int,n)
for i:=0;i<n;i++{
res[i] = make([]int,n)
}
center := n/2
startx,starty := 0,0
offset := 1
loop := n/2
count := 1
for loop>0{
i,j := startx,starty
for j=starty;j<n-offset;j++{
res[i][j]=count
count++
}
for i = startx;i<n-offset;i++{
res[i][j] = count
count++
}
for ;j>starty;j--{
res[i][j] = count
count++
}
for ;i>startx;i--{
res[i][j] = count
count++
}
startx++
starty++
offset++
loop--
}
if n%2 ==1{
res[center][center]=n*n
}
return res
}
func generateMatrix(n int) [][]int {
top, bottom := 0, n-1
left, right := 0, n-1
num := 1
tar := n * n
matrix := make([][]int, n)
for i := 0; i < n; i++ {
matrix[i] = make([]int, n)
}
for num <= tar {
for i := left; i <= right; i++ {
matrix[top][i] = num
num++
}
top++
for i := top; i <= bottom; i++ {
matrix[i][right] = num
num++
}
right--
for i := right; i >= left; i-- {
matrix[bottom][i] = num
num++
}
bottom--
for i := bottom; i >= top; i-- {
matrix[i][left] = num
num++
}
left++
}
return matrix
}