LeetCode笔记:Weekly Contest 357

这篇具有很好参考价值的文章主要介绍了LeetCode笔记:Weekly Contest 357。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • LeetCode笔记:Weekly Contest 357
    • 1. 题目一
      • 1. 解题思路
      • 2. 代码实现
    • 2. 题目二
      • 1. 解题思路
      • 2. 代码实现
    • 3. 题目三
      • 1. 解题思路
      • 2. 代码实现
    • 4. 题目四
  • 比赛链接:https://leetcode.com/contest/weekly-contest-357

1. 题目一

给出题目一的试题链接如下:

  • 2810. Faulty Keyboard

1. 解题思路

这一题就是按照题目给出的条件重新转义一下字符串即可,倒是不用怎么多说。

2. 代码实现

给出python代码实现如下:

class Solution:
    def finalString(self, s: str) -> str:
        out = ""
        for ch in s:
            if ch == "i":
                out = out[::-1]
            else:
                out = out + ch
        return out

提交代码评测得到:耗时50ms,占用内存16.3MB。

2. 题目二

给出题目二的试题链接如下:

  • 2811. Check if it is Possible to Split Array

1. 解题思路

这一题其实就是个脑筋急转弯,不难想到,事实上,只要存在两个相邻的数加和大于目标值,然后总是存在一种切分方法对数组进行切分。

反之,也不难思考,如果所有相邻元素的加和均小于目标值,那么一定无法将目标数组切分为单一元素的子序列,只要考虑一下连续三个元素的切分即可。

因此,答案事实上就变成一行代码的事了。

2. 代码实现

给出python代码实现如下:

class Solution:
    def canSplitArray(self, nums: List[int], m: int) -> bool:
        n = len(nums)
        return n <= 2 or any(nums[i] + nums[i+1] >= m for i in range(n-1))

提交代码评测得到:耗时55ms,占用内存16.2MB。

3. 题目三

给出题目三的试题链接如下:

  • 2812. Find the Safest Path in a Grid

1. 解题思路

这一题我的实现上多少有一些复杂,不过思路上倒是非常清晰的,就是分两步。

第一步求出每一个位置上的safeness factor,这个用一个bfs即可完成。

第二步就是求一条连通路径,使得从起点到终点的safeness factor最大。这个用一个dsu即可实现,我们只需要按照safeness factor对所有的格子进行倒序排序,然后不断地将其进行聚类,直到起点和终点被连通为止,此时的safeness factor就是可以获得的最大的safeness factor。

2. 代码实现

给出python代码实现如下:

class DSU:
    def __init__(self, n):
        self.root = {(i,j): (i,j) for i in range(n) for j in range(n)}
        
    def find(self, p):
        if self.root[p] != p:
            self.root[p] = self.find(self.root[p])
        return self.root[p]
    
    def union(self, a, b):
        x = self.find(a)
        y = self.find(b)
        self.root[y] = x
        return

class Solution:
    def maximumSafenessFactor(self, grid: List[List[int]]) -> int:
        n = len(grid)
        
        factors = [[0 for _ in range(n)] for _ in range(n)]
        q = [[i, j, 0] for i in range(n) for j in range(n) if grid[i][j] == 1]
        seen = {(i, j) for i, j, _ in q}
        while q:
            i, j, d = q.pop(0)
            if i-1 >= 0 and (i-1, j) not in seen:
                factors[i-1][j] = d+1
                q.append((i-1, j, d+1))
                seen.add((i-1, j))
            if i+1 < n and (i+1, j) not in seen:
                factors[i+1][j] = d+1
                q.append((i+1, j, d+1))
                seen.add((i+1, j))
            if j-1 >= 0 and (i, j-1) not in seen:
                factors[i][j-1] = d+1
                q.append((i, j-1, d+1))
                seen.add((i, j-1))
            if j+1 < n and (i, j+1) not in seen:
                factors[i][j+1] = d+1
                q.append((i, j+1, d+1))
                seen.add((i, j+1))

        dsu = DSU(n)
        s = sorted([(i, j) for i in range(n) for j in range(n)], key=lambda x: factors[x[0]][x[1]], reverse=True)
        for i, j in s:
            if i-1 >= 0 and factors[i-1][j] >= factors[i][j]:
                dsu.union((i-1, j), (i, j))
            if i+1 < n and factors[i+1][j] >= factors[i][j]:
                dsu.union((i+1, j), (i, j))
            if j-1 >= 0 and factors[i][j-1] >= factors[i][j]:
                dsu.union((i, j-1), (i, j))
            if j+1 < n and factors[i][j+1] >= factors[i][j]:
                dsu.union((i, j+1), (i, j))
            if dsu.find((0, 0)) == dsu.find((n-1, n-1)):
                return factors[i][j]
        return 0

提交代码评测得到:耗时5276ms,占用内存90.3MB。

4. 题目四

给出题目四的试题链接如下:

  • 2813. Maximum Elegance of a K-Length Subsequence

这一题说来惭愧,实在是没啥思路,看了其他大佬们的一些解答,也没怎么看明白,所以这里就不班门弄斧了,后面有时间我再想想吧,这里就先放弃了……文章来源地址https://www.toymoban.com/news/detail-631054.html

到了这里,关于LeetCode笔记:Weekly Contest 357的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • LeetCode笔记:Weekly Contest 349

    LeetCode笔记:Weekly Contest 349 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 比赛链接:https://leetcode.com/contest/weekly-contest-349 给出题目一的试题链接如下: 2733. Neither Minimum nor Maximum 1. 解题思路 这一题我实现的比较

    2024年02月08日
    浏览(22)
  • LeetCode笔记:Weekly Contest 359

    LeetCode笔记:Weekly Contest 359 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 比赛链接:https://leetcode.com/contest/weekly-contest-359 给出题目一的试题链接如下: 2828. Check if a String Is an Acronym of

    2024年02月12日
    浏览(26)
  • leetcode第 357/358 场周赛

    可能别人有更好的解法,我这写法是不断往线段树中插入数值,每次先插入nums[i-x],然后搜索(1到i)中的最大值和(i到max)中的最小值去更新ans。 看了看别人题解,直接用set写是真的牛。自己还是见识短浅了。 暴力乱搞,考虑两种极端情况,一种无脑选profit大的,一种优先选

    2024年02月12日
    浏览(30)
  • 【力扣周赛】第350场周赛

    题目描述 描述:卡车有两个油箱。给你两个整数,mainTank 表示主油箱中的燃料(以升为单位),additionalTank 表示副油箱中的燃料(以升为单位)。 该卡车每耗费 1 升燃料都可以行驶 10 km。每当主油箱使用了 5 升燃料时,如果副油箱至少有 1 升燃料,则会将 1 升燃料从副油箱

    2024年02月09日
    浏览(41)
  • 【力扣周赛】第 352 场周赛

    第 352 场周赛 2760. 最长奇偶子数组 提示: 1 = nums.length = 100 1 = nums[i] = 100 1 = threshold = 100 因为数据范围特别小,所以怎么暴力都是无所谓的。 继续优化 可以发现,每个满足条件的子数组是不会重叠的, 所以在枚举 l 的时候,每次可以将下一个 l 设置成 r。 代码如下: 2761. 和

    2024年02月12日
    浏览(27)
  • 力扣周赛日记350

    早上兴高采烈起床写周赛,结果写完两题开始坐牢。菜的很。 LeetCode 第 350 场周赛 LeetCode 6901. 总行驶距离 2.1.1 题意 卡车两个油箱,耗油1L行驶10km。油箱A耗5L,油箱B给邮箱A油1L。油箱A空后停止行驶,求可行使距离。 2.1.2 分析 开始想O(1)解法,发现这题主要问题在油箱B给了油箱

    2024年02月10日
    浏览(28)
  • 力扣第357场周赛补题

    6925. 故障键盘 - 力扣(LeetCode) 思路:模拟 6953. 判断是否能拆分数组 - 力扣(LeetCode) 思路:脑筋急转弯 2812. 找出最安全路径 - 力扣(LeetCode) 思路:多源bfs+倒序枚举+并查集

    2024年02月14日
    浏览(28)
  • 【力扣周赛】第 113 场双周赛(贪心&异或性质&换根DP)

    https://leetcode.cn/contest/biweekly-contest-113/ https://leetcode.cn/problems/minimum-right-shifts-to-sort-the-array/ 提示: 1 = nums.length = 100 1 = nums[i] = 100 nums 中的整数互不相同。 因为数据范围很小,所以可以从小到大枚举可能的答案。 https://leetcode.cn/problems/minimum-array-length-after-pair-removals/ 提示: 1

    2024年02月07日
    浏览(25)
  • LeetCode笔记:Biweekly Contest 108

    LeetCode笔记:Biweekly Contest 108 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 比赛链接:https://leetcode.com/contest/biweekly-contest-108/ 给出题目一的试题链接如下: 2765. Longest Alternating Subarray 1

    2024年02月13日
    浏览(29)
  • LeetCode笔记:Biweekly Contest 107

    LeetCode笔记:Biweekly Contest 107 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 算法优化 3. 题目三 1. 解题思路 2. 代码实现 4. 题目四 1. 解题思路 2. 代码实现 比赛链接:https://leetcode.com/contest/biweekly-contest-107/ 给出题目一的试题链接如下: 2744. Find Maximum N

    2024年02月11日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包