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

LeetCode笔记:Weekly Contest 301

作者头像
codename_cys
发布2022-07-11 18:18:01
2780
发布2022-07-11 18:18:01
举报
文章被收录于专栏:我的充电站我的充电站

1. 题目一

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

1. 解题思路

这一题其实仔细分析一下的话答案是比较明显的,就是总数的一半。

但是其中存在一个特例,就是如果某一个元素的个数大于总数的一半时,那么它就是答案。

因此,我们只需要取总数的一半与最大元素的两者较大值进行返回即可。

2. 代码实现

给出python代码实现如下:

代码语言:javascript
复制
class Solution:
    def fillCups(self, amount: List[int]) -> int:
        return max(max(amount), (sum(amount)+1) // 2)

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

2. 题目二

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

1. 解题思路

这一题其实也简单,只要每一次都确保当前的记录当中有数字且有序即可。

2. 代码实现

给出python代码实现如下:

代码语言:javascript
复制
class SmallestInfiniteSet:

    def __init__(self):
        self.nums = [i for i in range(1, 1001)]
        self.max_elem = 1000

    def popSmallest(self) -> int:
        if self.nums == []:
            self.nums = [i + self.max_elem for i in range(1, 1001)]
            self.max_elem += 1000
        return self.nums.pop(0)


    def addBack(self, num: int) -> None:
        while num > self.max_elem:
            self.nums.extend([i + self.max_elem for i in range(1, 1001)])
            self.max_elem += 1000
        idx = bisect.bisect_left(self.nums, num)
        if idx >= len(self.nums) or self.nums[idx] != num:
            self.nums.insert(idx, num)
        return

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

3. 题目三

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

1. 解题思路

这一题要想能够成功其实只需要满足如下三个条件即可:

  1. LR的数目两字符串相同;
  2. 对于任意一个位置,目标字符串左侧的L总是不少于起始字符串,同样的,目标字符串右侧的R也有总是不多于起始字符串;
  3. 对于任意一个对应的L,在两字符串的左侧总是有相同个数的R

2. 代码实现

给出python代码实现如下:

代码语言:javascript
复制
class Solution:
    def canChange(self, start: str, target: str) -> bool:
        cnt1, cnt2 = Counter(start), Counter(target)
        if cnt1["L"] != cnt2["L"] or cnt1["R"] != cnt2["R"]:
            return False
        
        lcnt, rcnt = 0, 0
        for ch1, ch2 in zip(start, target):
            if ch1 == "L":
                lcnt += 1
            elif ch1 == "R":
                rcnt +=1
            
            if ch2 == "L":
                lcnt -= 1
            elif ch2 == "R":
                rcnt -=1
            
            if lcnt > 0 or rcnt < 0:
                return False
        
        lr1, lr2 = [], []
        cnt1, cnt2 = 0, 0
        for ch1, ch2 in zip(start, target):
            if ch1 == "R":
                cnt1 += 1
            elif ch1 == "L":
                lr1.append(cnt1)
            
            if ch2 == "R":
                cnt2 += 1
            elif ch2 == "L":
                lr2.append(cnt2)
        
        return all(x == y for x, y in zip(lr1, lr2))

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

4. 题目四

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

这一题坦率地说挺伤人的,因为大佬们9分钟就能够搞定4道题,我却悲剧地做了一下午依然没有搞定,甚至说到最后跑去看大佬们的解答思路都没有看得太明白,真的挺伤的,唉……

如果有哪位读者大佬知道这题的思路的话,请务必在评论区告知一下,万分感谢!

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

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

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

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

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