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

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

2460. 对数组执行操作-简单

给你一个下标从 0 开始的数组 nums ,数组大小为 n ,且由 非负 整数组成。
你需要对数组执行 n - 1 步操作,其中第 i 步操作(从 0 开始计数)要求对 nums 中第 i 个元素执行下述指令:
如果 nums[i] == nums[i + 1] ,则 nums[i] 的值变成原来的 2 倍,nums[i + 1] 的值变成 0 。否则,跳过这步操作。
在执行完 全部 操作后,将所有 0 移动 到数组的 末尾 。
例如,数组 [1,0,2,0,0,1] 将所有 0 移动到末尾后变为 [1,2,1,0,0,0] 。
返回结果数组。
注意 操作应当 依次有序 执行,而不是一次性全部执行。

题解:
跟着题目描述一步一步做就可以了,没难度

代码(Go):

func applyOperations(nums []int) []int {
    for i := 0;i < len(nums) - 1;i++{
        if nums[i] == nums[i + 1]{
            nums[i] = nums[i] * 2
            nums[i + 1] = 0
        }
    }
    p := 0
    for i := 0;i < len(nums);i++{
        if nums[i] != 0{
            temp := nums[p]
            nums[p] = nums[i]
            nums[i] = temp
            p++
        }
    }
    return nums
}

2363. 合并相似的物品-简单

题目描述:
给你两个二维整数数组 items1 和 items2 ,表示两个物品集合。每个数组 items 有以下特质:
items[i] = [valuei, weighti] 其中 valuei 表示第 i 件物品的 价值 ,weighti 表示第 i 件物品的 重量 。
items 中每件物品的价值都是 唯一的 。
请你返回一个二维数组 ret,其中 ret[i] = [valuei, weighti], weighti 是所有价值为 valuei 物品的 重量之和 。
注意:ret 应该按价值 升序 排序后返回。

题解:
思想就是哈希表,但是因为哈希表无序且价值上限是1000,所以采用了计数排序的思想用一个长度是1000的数组保存重量,然后遍历此数组取出重量相加后的结果

代码(Go):

func mergeSimilarItems(items1 [][]int, items2 [][]int) [][]int {
    arr := [1001]int{}
    for _,v := range items1{
        arr[v[0]] += v[1]
    }
    for _,v := range items2{
        arr[v[0]] += v[1]
    }
    sce := [][]int{}
    for i,v := range arr{
        if v != 0{
            scei := make([]int,2)
            scei[0] = i
            scei[1] = v
            sce = append(sce,scei)
        }
    }
    return sce
}

1408. 数组中的字符串匹配-简单

题目描述:
给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词。
如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 words[i] ,那么字符串 words[i] 就是 words[j] 的一个子字符串。

题解:
只会暴力,本来以为不行,没想到官方题解也只有暴力,看评论有大佬用超级长的代码降低了时间复杂度,估计因为这题是简单题所以官方就没给优化的算法

代码(Go):

func stringMatching(words []string) (ans []string) {
    for i, x := range words {
        for j, y := range words {
            if j != i && strings.Contains(y, x) {
                ans = append(ans, x)
                break
            }
        }
    }
    return
}

92. 反转链表 II-中等

题目描述:
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

题解:
反转之后再将需要反转的子链表和前后连接起来,用一个变量记录子链表的前连接点,三个变量用于反转链表。官方题解在一次遍历中边遍历边进行头插法插节点,可以少遍历一次链表,速度更快

代码(Go):

func reverseBetween(head *ListNode, left int, right int) *ListNode {
    if head.Next == nil || left == right{
        return head
    }
    p,r,l := head,head,head
    q := p.Next
    for i := 0;i < left - 1;i++{
        p = p.Next
        q = q.Next
    }
    for i := 0;i < right - 1;i++{
        r = r.Next
    }
    p.Next = r.Next
    r.Next = nil
    for q.Next != nil{
        r = q.Next
        q.Next = p
        p = q
        q = r
        r = r.Next
    }
    q.Next = p
    if left > 1{
        for i := 0;i < left - 2;i++{
            l = l.Next
        }
        l.Next = q
    }else{
        head = q
    }
    return head
}

总结

又是比较顺利的一天,没有什么难题文章来源地址https://www.toymoban.com/news/detail-487472.html

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

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

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

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月09日
    浏览(34)
  • 【从零开始学习JAVA | 第四十五篇】反射

    目录 前言: ​反射:  使用反射的步骤: 1.获取阶段: 2.使用阶段: 反射的应用场景: 使用反射的优缺点: 总结: Java中的反射是一项强大而灵活的功能,它允许程序在运行时 动态地获取、操作和利用类的信息 。通过反射,我们可以在运行时检查和修改类的属性、调用类

    2024年02月13日
    浏览(34)
  • 【从零开始学习JAVA | 第四十篇】了解线程池

    目录 前言: 线程池: 线程池的工作流程: 代码实现线程池: 任务拒绝策略:  线程池多大才算合适? 总结:         在Java编程中,线程池是一个强大的工具,它能够管理和复用线程,提供高效的并发处理能力。通过线程池,我们可以有效地控制并发线程的数量,并降

    2024年02月13日
    浏览(41)
  • 【从零开始学习JAVA | 第四十六篇】处理请求参数

            在我们之前的学习中,我们已经基本学习完了JAVA的基础内容,从今天开始我们就逐渐进入到JAVA的时间,在这一大篇章,我们将对前后端有一个基本的认识,并要学习如何成为一名合格的后端工程师。今天我们介绍的内容是:如何在后端处理前端的请求 目录 前言:

    2024年02月11日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包