前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode笔记:Biweekly Contest 67

LeetCode笔记:Biweekly Contest 67

作者头像
codename_cys
发布2021-12-20 19:27:11
3520
发布2021-12-20 19:27:11
举报
文章被收录于专栏:我的充电站

1. 题目一

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

1. 解题思路

这一题思路其实还好,其实就是找到最大的k个数,然后构成一个子集进行输出,但是需要注意的是,返回的序列需要保持其原始的顺序,因此我们在排序时需要首先保留其原始的位置信息,然后根据位置信息恢复其原始的排序。

2. 代码实现

给出python代码实现如下:

代码语言:javascript
复制
class Solution:
    def maxSubsequence(self, nums: List[int], k: int) -> List[int]:
        nums = [(i, k) for i, k in enumerate(nums)]
        nums = sorted(nums, key=lambda x: x[1])[-k:]
        return [x[1] for x in sorted(nums, key=lambda x: x[0])]

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

2. 题目二

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

1. 解题思路

这一题我们的思路同样也比较直接,就是直接考察每一个位置左侧和右侧守卫不多于当日的日子的数目,然后只需要满足左右均多于目标值time的日子进行返回即可。

2. 代码实现

给出python代码实现如下:

代码语言:javascript
复制
class Solution:
    def goodDaysToRobBank(self, security: List[int], time: int) -> List[int]:
        n = len(security)
        down = [0 for _ in range(n)]
        up = [0 for _ in range(n)]
        for i in range(n-1):
            if security[i] >= security[i+1]:
                down[i+1] = down[i] + 1
            if security[n-1-i] >= security[n-2-i]:
                up[n-2-i] = up[n-1-i] + 1
        
        is_good = [i for i in range(n) if up[i] >= time and down[i] >= time]
        return is_good

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

3. 题目三

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

1. 解题思路

这一题我的思路也比较暴力,就是先通过一个二重循环找到每一个炸弹可以蔓延开的炸弹,然后通过一个深度优先遍历即可找到每一个炸弹引爆时可以引爆的总的炸弹数。

2. 代码实现

给出python代码实现如下:

代码语言:javascript
复制
class Solution:
    def maximumDetonation(self, bombs: List[List[int]]) -> int:
        n = len(bombs)
        cover = defaultdict(list)
        for i, (x, y, r) in enumerate(bombs):
            for j in range(n):
                if j == i:
                    continue
                x1, y1, _ = bombs[j]
                if (x-x1)**2 + (y-y1)**2 <= r*r:
                    cover[i].append(j)
        
        def dfs(u, seen):
            for v in cover[u]:
                if v not in seen:
                    seen.add(v)
                    dfs(v, seen)
            return len(seen)
        
        return max(dfs(i, {i}) for i in range(n))

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

4. 题目四

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

1. 解题思路

这一题坦率地说没看出来为啥是一个hard的题目,维护一个有序数组即可完成了。

2. 代码实现

给出python代码实现如下:

代码语言:javascript
复制
class SORTracker:

    def __init__(self):
        self.idx = 0
        self.q = []

    def add(self, name: str, score: int) -> None:
        bisect.insort(self.q, (-score, name))

    def get(self) -> str:
        res = self.q[self.idx][1]
        self.idx += 1
        return res

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目一
    • 1. 解题思路
      • 2. 代码实现
      • 2. 题目二
        • 1. 解题思路
          • 2. 代码实现
          • 3. 题目三
            • 1. 解题思路
              • 2. 代码实现
              • 4. 题目四
                • 1. 解题思路
                  • 2. 代码实现
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档