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

这篇具有很好参考价值的文章主要介绍了从零开始的力扣刷题记录-第四十四天。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

594. 最长和谐子序列-简单

题目描述:
和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。
现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。
数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。

题解:
哈希表存储每个值出现的次数,再遍历哈希表寻找每个值和每个比它大1的值出现的次数之和,用一个临时变量保存最大的值即为所求解

代码(Go):

func findLHS(nums []int) int {
    dict := map[int]int{}
    for _,v := range nums{
        if _,ok := dict[v];ok{
            dict[v]++
        }else{
            dict[v] = 1
        }
    }
    temp := 0
    for i,v := range dict {
        if _,ok := dict[i + 1];ok{
            if v + dict[i + 1] > temp{
                temp = v + dict[i + 1]
            }
        }
    }
    return temp
}

925. 长按键入-简单

题目描述:
你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。
你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True

题解:
双指针。分别指向两个字符串的当前比对位置进行比较,同时还需要一位标志位作为对比失败的缓冲。若对比相等则标志位置0,type指针加一,若对比失败则name指针加一同时标志位置1。若对比成功时二者的下一位也相等则同时加一,若对比失败时标志位为1则返回false,最后还要看name是否遍历完了,若没有遍历完则也要返回false。
这题判断逻辑写复杂了,官方比较简单,而且不需要标志位,边界条件判断的很漂亮,我写的还是水平不行

代码(Go):

func isLongPressedName(name string, typed string) bool {
    i,j := 0,0
    flag := 1
    for i < len(typed) && j < len(name){
        if typed[i] == name[j]{
            if j < len(name) - 1 &&i < len(typed) - 1 && typed[i + 1] == name[j + 1]{
                j++
            }
            i++
            flag = 0
        }else if flag == 0{
            j++
            flag = 1
        }else{
            return false
        }
    }
    if flag == 1 || j < len(name) - 1{
        return false
    }
    return true
}

1078. Bigram 分词-简单

题目描述:
给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 “first second third” 形式出现的情况,其中 second 紧随 first 出现,third 紧随 second 出现。
对于每种这样的情况,将第三个词 “third” 添加到答案中,并返回答案。

题解:
按空格分割字符串后进行比对,若两个单词分别相等且存在第三个单词就将其加入结果数组

代码(Go):

func findOcurrences(text string, first string, second string) []string {
    sce := strings.Split(text," ")
    re := []string{}
    for i := 0;i < len(sce);i++{
        if sce[i] == first && i + 1 < len(sce) && sce[i + 1] == second{
            if i + 2 < len(sce){
                re = append(re,sce[i + 2])
            }
        }
    }
    return re
}

1605. 给定行和列的和求可行矩阵-中等

题目描述:
给你两个非负整数数组 rowSum 和 colSum ,其中 rowSum[i] 是二维矩阵中第 i 行元素的和, colSum[j] 是第 j 列元素的和。换言之你不知道矩阵里的每个元素,但是你知道每一行和每一列的和。
请找到大小为 rowSum.length x colSum.length 的任意 非负整数 矩阵,且该矩阵满足 rowSum 和 colSum 的要求。
请你返回任意一个满足题目要求的二维矩阵,题目保证存在 至少一个 可行矩阵。

题解:
核心思想其实就是尽量往大了填,一个格子同时受到横向和竖向的限制,就填这两个值里较小的那个,然后这一行或者列剩下的部分就可以不用管全填0就可以了,接着让行和列的和减掉这个值,较小的那个变为0后直接换到下一行或列,较大的那个拿去与下一行或列进行比较,重复这个过程就可以了,这里官方写的比较清楚

代码(Go):

func restoreMatrix(rowSum []int, colSum []int) [][]int {
    n, m := len(rowSum), len(colSum)
    matrix := make([][]int, n)
    for i := range matrix {
        matrix[i] = make([]int, m)
    }
    i, j := 0, 0
    for i < n && j < m {
        temp := min(rowSum[i], colSum[j])
        matrix[i][j] = temp
        rowSum[i] -= temp
        colSum[j] -= temp
        if rowSum[i] == 0 {
            i++
        }
        if colSum[j] == 0 {
            j++
        }
    }
    return matrix
}

func min(x int, y int) int {
    if x > y {
        return y
    }
    return x
}

总结

今天被中等题干碎了,连续好几道中等题都没做出来,感觉状态不太好,几道题都是一看答案恍然大悟自己想的时候不知道为啥就没想出来,最后终于挑到一个软柿子做出来了文章来源地址https://www.toymoban.com/news/detail-472231.html

到了这里,关于从零开始的力扣刷题记录-第四十四天的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    题目描述: 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按如下格式输

    2024年02月06日
    浏览(47)
  • 从零开始的力扣刷题记录-第六十二天

    题目描述: 给你一个非负整数数组 nums 。在一步操作中,你必须: 选出一个正整数 x ,x 需要小于或等于 nums 中 最小 的 非零 元素。 nums 中的每个正整数都减去 x。 返回使 nums 中所有元素都等于 0 需要的 最少 操作数。 题解: 由于每次都要减去一个最小的非零元素,可以想

    2024年02月11日
    浏览(48)
  • 从零开始的力扣刷题记录-第七十二天

    题目描述: 给你一个整数数组 nums ,它包含 2 * n 个整数。 你需要将 nums 划分成 n 个数对,满足: 每个元素 只属于一个 数对。 同一数对中的元素 相等 。 如果可以将 nums 划分成 n 个数对,请你返回 true ,否则返回 false 题解: 哈希表统计各元素数量,如果有不能被2整除的就

    2024年02月11日
    浏览(70)
  • 从零开始的力扣刷题记录-第五十八天

    题目描述: 给你一个 不包含 任何零的整数数组 nums ,找出自身与对应的负数都在数组中存在的最大正整数 k 。 返回正整数 k ,如果不存在这样的整数,返回 -1 。 题解: 哈希表存储负数,再遍历nums对每一个正数去哈希表中查找是否存在对应的负数。存在就更新返回值 代码

    2024年02月09日
    浏览(47)
  • 从零开始的力扣刷题记录-第八十七天

    题目描述: 给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字: 例如,从根节点到叶节点的路径 1 - 2 - 3 表示数字 123 。 计算从根节点到叶节点生成的 所有数字之和 。 叶节点 是指没有子节点的节点

    2024年02月07日
    浏览(46)
  • 从零开始的力扣刷题记录-第六十一天

    题目描述: 给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。 题解: 排序后从后往前遍历,取最大的三个边,如果满足两边之和大于第三边则返回,否则整体向前

    2024年02月09日
    浏览(56)
  • 从零开始的力扣刷题记录-第五十一天

    题目描述: 给你一棵二叉搜索树的 root ,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。 题解: 中序遍历存储节点后按顺序连接即可 代码(Go): 题目描述: 小扣在秋日市集发

    2024年02月08日
    浏览(44)
  • 【力扣刷题 | 第二十四天】

    目录 前言: 1049. 最后一块石头的重量 II - 力扣(LeetCode) 494. 目标和 - 力扣(LeetCode) 总结:                  今天我们依然暴打动态规划 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉

    2024年02月14日
    浏览(38)
  • LeetCode 刷题记录——从零开始记录自己一些不会的

    1. 最多可以摧毁的敌人城堡数目 题意 思路 两层循环,太low了 用一个变量记录前一个位置 代码 2. 到达终点的数字 题意 思路 代码 3. 单词的压缩编码 题意 思路 代码 思路2 去找到是否不同的单词具有相同的后缀,我们可以将其反序之后插入字典树中。例如,我们有 “time”

    2024年02月09日
    浏览(67)
  • 力扣刷MySQL-第四弹(详细讲解)

     🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:力扣刷题讲解-MySQL 🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏 📜 感谢大家的关注! ❤️ 目录 🚀游戏玩

    2024年01月19日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包