代码随想录算法训练营Day1 | 977. 有序数组的平方、209. 长度最小的子数组、59. 螺旋矩阵Ⅱ

LeetCode 977. 有序数组的平方

思路:用双指针去做,从后向前遍历两个数组,谁的平方大,谁就去放到后面。

func sortedSquares(nums []int) []int {
    left := 0
    right := len(nums) - 1

    res := make([]int, len(nums))
    n := len(nums) - 1
    for left <= right{
        if nums[right] * nums[right] > nums[left]*nums[left]{
            res[n] = nums[right] * nums[right]
            right--
        }else{
            res[n] = nums[left] * nums[left]
            left++
        }
        n--
    }
    return res
}

LeetCode 209. 长度最小的子数组

思路:利用双指针的思想,快慢指针,快指针遍历,sum+=nums[fast],判断sum是否大于等于target,如果大于等于target,那么就移动慢指针,去减去慢指针的值,直到sum小于target。

func minSubArrayLen(target int, nums []int) int {
    res := math.MaxInt32
    left := 0
    right := 0
    sum := 0
    for right < len(nums){
        sum += nums[right]
        right++
        for sum >= target{
            res = min(res, right - left)
            sum -=nums[left]
            left++
        }
    }
    if res == math.MaxInt32{
        return 0
    }
    return res
}

LeetCode 59. 螺旋矩阵Ⅱ

思路:转圈,主要是怎么处理边界的问题

func generateMatrix(n int) [][]int {
    cur := 1
    res := make([][]int, n)

    for i, _ := range res{
        res[i] = make([]int, n)
    }

    left, up, right, down := 0, 0, n-1, n-1
    for cur <= n * n{
        for i:=left; i <= right; i++{
            res[up][i] = cur
            cur++
        }
        up++

        for i:=up; i <= down; i++{
            res[i][right] = cur
            cur++
        }
        right--

        for i:=right; i >= left; i--{
            res[down][i] = cur
            cur++
        }
        down--
        for i:= down; i >= up; i--{
            res[i][left] = cur
            cur++
        }
        left++
    }
    return res
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值