本文共 2291 字,大约阅读时间需要 7 分钟。
第一题是设计题本来打算放到最后做的,结果第三题死活没过,所以最后的得分和排名都很低(还是太菜了)
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)
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)
最后一题我放弃了…太难了转载地址:http://nhba.baihongyu.com/