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

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

976. 三角形的最大周长-简单

题目描述:
给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。

题解:
排序后从后往前遍历,取最大的三个边,如果满足两边之和大于第三边则返回,否则整体向前移一位

代码(Go):

func largestPerimeter(a []int) int {
    sort.Ints(a)
    for i := len(a) - 1; i >= 2; i-- {
        if a[i-2]+a[i-1] > a[i] {
            return a[i-2] + a[i-1] + a[i]
        }
    }
    return 0
}

2347. 最好的扑克手牌-简单

题目描述:
给你一个整数数组 ranks 和一个字符数组 suit 。你有 5 张扑克牌,第 i 张牌大小为 ranks[i] ,花色为 suits[i] 。
下述是从好到坏你可能持有的 手牌类型 :
“Flush”:同花,五张相同花色的扑克牌。
“Three of a Kind”:三条,有 3 张大小相同的扑克牌。
“Pair”:对子,两张大小一样的扑克牌。
“High Card”:高牌,五张大小互不相同的扑克牌。
请你返回一个字符串,表示给定的 5 张牌中,你能组成的 最好手牌类型 。
注意:返回的字符串 大小写 需与题目描述相同。

题解:
哈希表计数,按题目描述模拟即可

代码(Go):

func bestHand(ranks []int, suits []byte) string {
    temps := suits[0]
    flags := 1
    for _,v := range suits{
        if v != temps{
            flags = 0
        }
    }
    if flags == 1{
        return "Flush"
    }
    dict := map[int]int{}
    for _,v := range ranks{
        dict[v]++
    }
    tempi := 0
    for _,v := range dict{
        if v >= 3 {
            return "Three of a Kind"
        }
        if v == 2{
            tempi = 1
        }
    }
    if tempi == 1{
        return "Pair"
    }
    return "High Card"
}

1254. 统计封闭岛屿的数目-中等

题目描述:
二维矩阵 grid 由 0 (土地)和 1 (水)组成。岛是由最大的4个方向连通的 0 组成的群,封闭岛是一个 完全 由1包围(左、上、右、下)的岛。
请返回 封闭岛屿 的数目。

题解:
和之前做过的岛屿数量题一个思路,找到一个土地块后以此为起点将周围所有土地都标记为2,区别是若扩散过程中遇到边界则封闭岛屿数量不增加

代码(Go):

func closedIsland(grid [][]int) int {
    re := 0
    for i := 0;i < len(grid);i++{
        for j := 0;j < len(grid[0]);j++{
            if grid[i][j] == 0{
                temp := 0
                grid,temp = flag(grid,i,j,temp)
                if temp == 0{
                    re++
                }
            }
        }
    }
    return re
}

func flag(grid [][]int,i int,j int,k int) ([][]int , int){
    k1,k2,k3,k4 := 0,0,0,0
    if i - 1 >= 0{
        if grid[i - 1][j] == 0{
            grid[i - 1][j] = 2
            grid,k1 = flag(grid,i - 1,j,k)
        }
    }else{
        k1 = 1
    }
    if j - 1 >= 0{
        if grid[i][j - 1] == 0{
            grid[i][j - 1] = 2
            grid,k2 = flag(grid,i,j - 1,k)
        }
    }else{
        k2 = 1
    }
    if i + 1 < len(grid){
        if grid[i + 1][j] == 0{
            grid[i + 1][j] = 2
            grid,k3 = flag(grid,i + 1,j,k)
        }
    }else{
        k3 = 1
    }
    if j + 1 < len(grid[0]){
        if grid[i][j + 1] == 0{
            grid[i][j + 1] = 2
            grid,k4 = flag(grid,i,j + 1,k)
        }
    }else{
        k4 = 1
    }
    return grid,k1 | k2 | k3 | k4
}

120. 三角形最小路径和-中等

题目描述:
给定一个三角形 triangle ,找出自顶向下的最小路径和。
每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。

题解:
动态规划,自上而下遍历三角形数组,每个点只可能由上层节点或上层节点的前一个节点移动而来,只需要比较二者大小,将小的与本身相加,就得到了本节点的最小路径,最后遍历三角形数组的最后一层,找出路径和最小的节点即可

代码(Go):

func minimumTotal(triangle [][]int) int {
    for i := 0;i < len(triangle);i++{
        for j := 0;j < len(triangle[i]);j++{
            if i > 0{
                if j == 0{
                    triangle[i][j] += triangle[i - 1][j]
                }else if j == len(triangle[i]) - 1{
                    triangle[i][j] += triangle[i - 1][j - 1]
                }else{
                    if triangle[i - 1][j] > triangle[i - 1][j - 1]{
                        triangle[i][j] += triangle[i - 1][j - 1]
                    }else{
                        triangle[i][j] += triangle[i - 1][j]
                    }
                }
            }
        }
    }
    re := 10000000
    for _,v := range triangle[len(triangle) - 1]{
        if v < re{
            re = v
        }
    }
    return re
}

总结

动态规划需要思考的地方还是很多的,今天这道动态规划实际上是做的第二道,最开始做的那道动态规划没看出来递推关系,感觉动态规划还是需要练一段时间的文章来源地址https://www.toymoban.com/news/detail-490084.html

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

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

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

相关文章

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

    题目描述: 给你一个整数数组 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)
  • 从零开始的力扣刷题记录-第四十八天

    给你一个下标从 0 开始的数组 nums ,数组大小为 n ,且由 非负 整数组成。 你需要对数组执行 n - 1 步操作,其中第 i 步操作(从 0 开始计数)要求对 nums 中第 i 个元素执行下述指令: 如果 nums[i] == nums[i + 1] ,则 nums[i] 的值变成原来的 2 倍,nums[i + 1] 的值变成 0 。否则,跳过

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

    题目描述: 给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。 如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false 。

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

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

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

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

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

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

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

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

    2024年01月20日
    浏览(40)
  • 【力扣刷题 | 第十七天】

    目录 前言: 55. 跳跃游戏 - 力扣(LeetCode) 45. 跳跃游戏 II - 力扣(LeetCode) 总结:         今天两道类型都是贪心算法,希望可以有所收获 给定一个非负整数数组  nums  ,你最初位于数组的  第一个下标  。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断

    2024年02月15日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包