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

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

2441. 与对应负数同时存在的最大正整数-简单

题目描述:
给你一个 不包含 任何零的整数数组 nums ,找出自身与对应的负数都在数组中存在的最大正整数 k 。
返回正整数 k ,如果不存在这样的整数,返回 -1 。

题解:
哈希表存储负数,再遍历nums对每一个正数去哈希表中查找是否存在对应的负数。存在就更新返回值

代码(Go):

func findMaxK(nums []int) int {
    dict := map[int]int{}
    for _,v := range nums{
        if v < 0{
            dict[v] = 1
        }
    }
    temp := -1
    for _,v := range nums{
        if v > 0 && dict[-v] == 1{
            if v > temp{
                temp = v
            }
        }
    }
    return temp
}

1464. 数组中两元素的最大乘积-简单

题目描述:
给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。
请你计算并返回该式的最大值。

题解:
一次遍历,维护最大值和最小值

代码(Go):

func maxProduct(nums []int) int {
    first,second := 0,0
    for _,v := range nums{
        if v > first {
            second = first
            first = v
        }else if v > second{
            second = v
        }
    }
    return (first - 1) * (second - 1)
}

1646. 获取生成数组中的最大值-简单

题目描述:
给你一个整数 n 。按下述规则生成一个长度为 n + 1 的数组 nums :
nums[0] = 0
nums[1] = 1
当 2 <= 2 * i <= n 时,nums[2 * i] = nums[i]
当 2 <= 2 * i + 1 <= n 时,nums[2 * i + 1] = nums[i] + nums[i + 1]
返回生成数组 nums 中的 最大 值。

题解:
直接模拟,创建数组的过程中记录最大值即可

代码(Go):

func getMaximumGenerated(n int) int {
    nums := make([]int,n + 1)
    temp := 0
    for i := 0;i <= n;i++{
        if i == 0{
            nums[i] = 0
        }else if i == 1{
            nums[1] = 1
        }
        if i%2 == 0{
            nums[i] = nums[i/2]
        }else{
            nums[i] = nums[i/2] + nums[i/2 + 1]
        }
        if nums[i] > temp{
            temp = nums[i]
        }
    }
    return temp
}

93. 复原 IP 地址-中等

题目描述:
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。
例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

题解:
回溯常规步骤,终止条件是已经插入三个点,如果分割成的第四部分字符串对应的数值在0-255之间且没有前导0就加入结果集,for循环需要一个start变量标记起点,加入新数字的判断与终止条件判断相同,如果可以加入就用一个新字符串存储插入点后的字符串并用于递归传递,循环次数不能超过3次并且起始位置必须小于len(s)-3+point,这是为了给后续的插入留出空间;递归调用时需要让point加一,因为插入了一个点,所以i需要额外再加一即i加二

代码(Go):

func restoreIpAddresses(s string) []string {
    re := []string{}
    var backtrack func(s string,point int,start int)
    backtrack = func(s string,point int,start int){
        if point == 3{
            temp := strings.Split(s,".")
            tempnum,_ := strconv.Atoi(temp[3])
            if tempnum >=0 && tempnum <= 255{
                if temp[3][0] == '0' && len(temp[3]) != 1{
                    return
                }
                re = append(re,s)
                return
            }
            return
        }
        var temp string
        for i := start;i < start + 3 && i < len(s) - 3 + point;i++{
            temp += string(s[i])
            tempnum,_ := strconv.Atoi(temp)
            if tempnum >= 0 && tempnum <= 255{
                if temp[0] == '0' && len(temp) != 1{
                    break
                }
                temps := s[:i + 1] + "." + s[i + 1:]
                backtrack(temps,point + 1,i + 2)
            }

        }
    }
    backtrack(s,0,0)
    return re
}

总结

最后这个题是我去年笔试的时候忘了是米哈游还是哪家大厂的笔试题,当时我完全不会做,现在把回溯学完了发现也就这么回事文章来源地址https://www.toymoban.com/news/detail-486100.html

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

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

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

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年01月22日
    浏览(29)
  • 力扣刷题【第一期】

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

    2024年02月07日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包