【Leetcode第215场周赛】score:7 Time: 1:20:24 Rank:1774/4428

第一题是设计题本来打算放到最后做的,结果第三题死活没过,所以最后的得分和排名都很低(还是太菜了)

5601. 设计有序流(3分,通过率:2402/3184)
在这里插入图片描述

class OrderedStream:

    def __init__(self, n: int):
        self.n = n
        self.ptr = 1
        self.List = [ 0 for i in range(n+1)]

    def insert(self, id: int, value: str) -> List[str]:
        self.List[id] = value
        ans = []
        if self.ptr == id :
            while self.ptr <= self.n and self.List[self.ptr] != 0 :
                ans.append(self.List[self.ptr])
                self.ptr += 1
            return ans
        else:
            return []

5603. 确定两个字符串是否接近(4分,通过率:2078/4952)
在这里插入图片描述
思路:①如果两个字符有同样的出现字符
②出现的次数对应相等
③满足以上两个条件时返回True,否则返回False

class Solution:
    def closeStrings(self, word1: str, word2: str) -> bool:
        c1 = collections.Counter(word1)
        c2 = collections.Counter(word2)

        l1 = list(c1.values())
        l2 = list(c2.values())

        l1.sort()
        l2.sort()
        
        s1 = set(word1)
        s2 = set(word2)

        return l1 == l2 and s1 == s2

5602. 将 x 减到 0 的最小操作数(5分,通过率:871/6035)
尝试着使用搜索回溯做,但是会超时

尝试使用前缀和+哈希减少回溯深度,仍超时

class Solution:
    def minOperations(self, nums: List[int], x: int) -> int:
        len_ = len(nums)
        l,r = {},{}
        cl,cr = 0,0
        for i in range(len_):
            cl += nums[i]
            if cl <= x:
                l[cl] = i+1
            else:
                break
        for i in range(len_-1,-1,-1):
            cr += nums[i]
            if cr <= x:
                r[cr] = len_-i
            else:
                break

在题解里看到一个大佬的思路,和我第二个思路相似,但是他将哈希表的key和value倒了一下,这样节省了很多查询的时间

class Solution:
    def minOperations(self, nums: List[int], x: int) -> int:
        len_ = len(nums)
        l,r = {},{}
        cl,cr = 0,0
        for i in range(len_):
            cl += nums[i]
            if cl <= x:
                l[cl] = i+1
            else:
                break
        for i in range(len_-1,-1,-1):
            cr += nums[i]
            if cr <= x:
                r[cr] = len_-i
            else:
                break
        min_ = float('inf')
        if x in l:
            min_ = min(min_,l[x])
        if x in r:
            min_ = min(min_,r[x])
        for l_ in l:
            if x-l_ in r:
                min_ = min(min_,l[l_]+r[x-l_])
        return -1 if min_ > len_ else min_

5604. 最大化网格幸福感(6分,通过率:57/576)
最后一题我放弃了…太难了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值