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

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

2206. 将数组划分成相等数对-简单

题目描述:
给你一个整数数组 nums ,它包含 2 * n 个整数。
你需要将 nums 划分成 n 个数对,满足:
每个元素 只属于一个 数对。
同一数对中的元素 相等 。
如果可以将 nums 划分成 n 个数对,请你返回 true ,否则返回 false

题解:
哈希表统计各元素数量,如果有不能被2整除的就返回false

代码(Go):

func divideArray(nums []int) bool {
    dict := map[int]int{}
    for _,v := range nums{
        dict[v]++
    }
    for _,v := range dict{
        if v%2 == 1{
            return false
        }
    }
    return true
}

1920. 基于排列构建数组-简单

题目描述:
给你一个 从 0 开始的排列 nums(下标也从 0 开始)。请你构建一个 同样长度 的数组 ans ,其中,对于每个 i(0 <= i < nums.length),都满足 ans[i] = nums[nums[i]] 。返回构建好的数组 ans 。
从 0 开始的排列 nums 是一个由 0 到 nums.length - 1(0 和 nums.length - 1 也包含在内)的不同整数组成的数组。

题解:
按描述模拟即可

代码(Go):

func buildArray(nums []int) []int {
    ans := make([]int,len(nums))
    for i,v := range nums{
        ans[i] = nums[v]
    }
    return ans
}

1253. 重构 2 行二进制矩阵-中等

题目描述:
给你一个 2 行 n 列的二进制数组:
矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1。
第 0 行的元素之和为 upper。
第 1 行的元素之和为 lower。
第 i 列(从 0 开始编号)的元素之和为 colsum[i],colsum 是一个长度为 n 的整数数组。
你需要利用 upper,lower 和 colsum 来重构这个矩阵,并以二维整数数组的形式返回它。
如果有多个不同的答案,那么任意一个都可以通过本题。
如果不存在符合要求的答案,就请返回一个空的二维数组。

题解:
优先从行元素之和更大的一行开始放,如果等于2就直接放,放完2再遍历一遍放1,直到这一行放不下,换另一行放1,如果放不下或者没放完就返回空数组

代码(Go):

func reconstructMatrix(upper int, lower int, colsum []int) [][]int {
    flag := 1
    if upper < lower{
        upper,lower = lower,upper
        flag = 0
    }
    re := make([][]int,2)
    for i,_ := range re{
        temp := make([]int,len(colsum))
        re[i] = temp
    }
    sum := upper + lower
    for j := 0;j < len(colsum);j++{
        if colsum[j] == 2 && sum > lower{
            re[0][j] = 1
            colsum[j]--
            sum--
        }
    }
    for j := 0;j < len(colsum);j++{
        if colsum[j] == 1 && sum > lower && re[0][j] == 0{
            re[0][j] = 1
            colsum[j]--
            sum--
        }
    }
    if sum != lower{
        return [][]int{}
    }
    for j := 0;j < len(colsum);j++{
        if colsum[j] > 0 && sum > 0{
            re[1][j] = 1
            sum--
        }else if colsum[j] > 0{
            return [][]int{}
        }
    }
    if sum != 0{
        return [][]int{}
    }
    if flag == 0{
        re[0],re[1] = re[1],re[0]
    }
    return re
}

673. 最长递增子序列的个数-中等

题目描述:
给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。
注意 这个数列必须是 严格 递增的。

题解:
在昨天那道题的基础上增加了统计数量,方法就是把一维dp变成二维,增加一位用来记录当前长度递增子序列的数目,其实就相当于同时进行了两个动态规划,最后找出最长的长度并统计数量即可

代码(Go):

func findNumberOfLIS(nums []int) int {
    dp := make([][]int,len(nums))
    for i,_ := range dp{
        temp := make([]int,2)
        dp[i] = temp
    }
    dp[0][0] = 1
    dp[0][1] = 1
    for i := 1;i < len(nums);i++{
        for j := 0;j < i;j++{
            if nums[i] > nums[j]{
                if dp[i][0] == dp[j][0]{
                    dp[i][1] += dp[j][1]
                }else if dp[i][0] < dp[j][0]{
                    dp[i][0] = dp[j][0]
                    dp[i][1] = dp[j][1]
                }
            }
        }
        dp[i][0]++
        if dp[i][0] == 1{
            dp[i][1] = 1
        }
    }
    max := 0
    for _,v := range dp{
        if v[0] > max{
            max = v[0]
        }
    }
    re := 0
    for _,v := range dp{
        if v[0] == max{
            re += v[1]
        }
    }
    return re
}

总结

今天比较顺利,两道中等题都不难,动态规划是昨天题的加强版,但是动态规划这种题知道状态怎么转移就很好做了文章来源地址https://www.toymoban.com/news/detail-513039.html

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

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

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

相关文章

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

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

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

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

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

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

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

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

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

    题目描述: 给你一个下标从 0 开始的整数数组 nums 。在一步操作中,你可以执行以下步骤: 从 nums 选出 两个 相等的 整数 从 nums 中移除这两个整数,形成一个 数对 请你在 nums 上多次执行此操作直到无法继续执行。 返回一个下标从 0 开始、长度为 2 的整数数组 answer 作为答

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

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

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

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

    2024年02月09日
    浏览(34)
  • 【力扣刷题 | 第七天】

    今天我们将会进入栈与队列的刷题篇章,二者都是经典的数据结构,熟练的掌握栈与队列实现可以巧妙的解决有些问题。 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的

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

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

    2024年02月09日
    浏览(45)
  • 力扣刷题【第一期】

    1.爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 2.求两数的和(283) 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下

    2024年02月07日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包