从零开始的力扣刷题记录-第三十七天

1221. 分割平衡字符串-简单

题目描述:
平衡字符串 中,‘L’ 和 ‘R’ 字符的数量是相同的。
给你一个平衡字符串 s,请你将它分割成尽可能多的子字符串,并满足:
每个子字符串都是平衡字符串。
返回可以通过分割得到的平衡字符串的 最大数量 。

题解:
实际上和括号匹配是一个道理,记录存入的括号类型和数量,当遍历到新字符时就对比,如果类型相同就加1,不同就减1,等于0时可以进行切分

代码(Go):

func balancedStringSplit(s string) int {
    sum := 0
    tempnum := 0
    temp := s[0]
    for _,v := range s{
        if byte(v) == temp{
            tempnum++
        }else{
            if tempnum > 0{
                tempnum--
            }else{
                temp = byte(v)
                tempnum++
            }
        }
        if tempnum == 0{
            sum++
        }
    }
    return sum
}

832. 翻转图像-简单

题目描述:
给定一个 n x n 的二进制矩阵 image ,先 水平 翻转图像,然后 反转 图像并返回 结果 。
水平翻转图片就是将图片的每一行都进行翻转,即逆序。
例如,水平翻转 [1,1,0] 的结果是 [0,1,1]。
反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。
例如,反转 [0,1,1] 的结果是 [1,0,0]。

题解:
遍历加双指针翻转的同时反转

代码(Go):

func flipAndInvertImage(image [][]int) [][]int {
    for i := 0;i < len(image);i++{
        j,k := 0,len(image) - 1
        for j <= k{
            image[i][j],image[i][k] = image[i][k],image[i][j]
            if j != k{
                image[i][j] = 1 - image[i][j]
                image[i][k] = 1 - image[i][k]
            }else{
                image[i][j] = 1 - image[i][j]
            }
            j++
            k--
        }
    }
    return image
}

700. 二叉搜索树中的搜索-简单

题目描述:
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。
你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

题解:
基础题,没啥好说的

代码(Go):

func searchBST(root *TreeNode, val int) *TreeNode {
    for root != nil{
        if root.Val == val{
            return root
        }else if root.Val < val{
            root = root.Right
        }else{
            root = root.Left
        }
    }
    return nil
}

209. 长度最小的子数组-中等

题目描述:
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

题解:
双指针滑动窗口。感觉这类题真的多,天天都能看到

代码(Go):

func minSubArrayLen(target int, nums []int) int {
    p,q := 0,0
    length := len(nums) + 1
    sum := 0
    for q < len(nums){
        for sum < target && q < len(nums){
            sum += nums[q]
            q++
        }
        for sum >= target{
            if length > q - p{
                length = q - p
            }
            sum -= nums[p]
            p++
        }
    }
    if length == len(nums) + 1{
        return 0
    }
    return length
}

总结

今天四道题都比较简单。实际上我第四题做了个背包问题没做出来,之前没遇到过,去学习了一下背包问题的解法,然后又找了另一道中等题来做,所以今天实际上是做了5道题但是有一个没做出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值