LeetCode Practice Journal | Day2_数组(go)

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
}
  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值