Home

mq029.合并两个有序链表

题目链接 做过这个题了,比较清晰吧就不多说了,啊当然官网的解答更加简洁(这启发了我不要用or系列的,或许一开始都先用and的就好,然后剩下只有一个链表(其他情况下可能是列表或者数组之类的)的时候再讨论(如这里所示完全可以合在一起判断))。这个算法的时间复杂度是O(N),空间复杂度是O(1)。 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def mergeTwoLists1(self, l1...

Read more

lc692.前K个高频单词

题目链接 比较显然的就是用defaultdict或者直接用Count数一下排个序然后把相应的数据输出即可,这个算法的时间复杂度是O(NlogN),空间复杂度是O(N)。然后第K大问题总是会有堆,鉴于很久没复习了我先复制粘贴在这里。 from collections import Counter class Solution: def topKFrequent1(self, words: List[str], k: int) -> List[str]: cnt = Counter(words) res = sorted(cnt.items(), key=lambda x: (-x[1], x[0])) return [x...

Read more

lc1249.移除无效的括号

题目链接 啊思路就是记录下无效括号的位置然后再原字符串中除去,但是为什么我怎么慢哦,原来是因为别人在重新生成字符串时是用列表切片方式的所以很快。这个算法的时间复杂度是O(N),空间复杂度是O(N)。 class Solution: def minRemoveToMakeValid1(self, s: str) -> str: redundant = list() stack = list() for i in range(len(s)): if s[i] == "(": stack.append(i) elif s[i] == ")": ...

Read more

lc020.有效的括号

题目链接 快速地写了一下,没什么难度。这个算法的时间复杂度是O(N),空间复杂度是O(N)。 class Solution: def isValid(self, s: str) -> bool: d = {"(": ")", "[": "]", "{": "}"} stack = [] for c in s: if c in "([{": stack.append(c) else: if not stack: return False tm...

Read more

mq027.无重复字符的最长子串

题目链接 啊这个之前做过了的,却还是花了一个小时才调试出来??好啊,我是废物。具体思路见jz048吧太长了懒得打了。这个算法的时间复杂度是O(N),空间复杂度是O(1)。 class Solution: def lengthOfLongestSubstring(self, s: str) -> int: pos = dict() ans, cur = 0, 0 for i in range(len(s)): if s[i] in pos and cur >= i - pos[s[i]]: cur = i - pos[s[i]] else...

Read more

mq026.两数相加

题目链接 先如1所示自己试着写了一下,但是为什么我的时间效率只能超过百分之70的人啊,复制了更快的答案在2中。这个算法的时间复杂度是O(max(N, M)),空间复杂度是O(max(M, N))。 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def addTwoNumbers1(self, l1: ListNode, l2: ListNode) -> ListNode: ...

Read more

mq025.重新排列日志文件

题目链接 这没啥好说的,就按部就班就行,但是一部分一部分写出来肯定会有点丑,所以看了一下标准答案,把sorted的特性利用得很好了可以说。原来还能这么用啊。这个算法的时间复杂度是O(NlogN),空间复杂度是O(N)。 class Solution(object): def reorderLogFiles(self, logs): def f(log): id_, rest = log.split(" ", 1) return (0, rest, id_) if rest[0].isalpha() else (1,) return sorted(logs, key = f)

Read more

mq024.最常见的单词

题目链接 嗯自己写了一下,比较朴实(见1),应该有split函数可以直接按所有包含的标点分的,不过可能正在re里?然后用replace直接替换不想要的标点也会更快(见2)。这个算法的时间复杂度是O(N),空间复杂度是O(N)。 from collections import defaultdict class Solution: def mostCommonWord1(self, paragraph: str, banned: List[str]) -> str: cnt = defaultdict(int) processed = "" for char in paragraph: if c...

Read more

mq023.验证回文字符串II

题目链接 这个很显然就是左右双指针啊,但是我一开始还想了一下碰到不同字符的时候该删除哪个,毕竟有可能没把该删的删了反而把另一边的删了,然后一看别人的,哦直接把两遍都各自删一下试试看取个或就行了啊。这个算法的时间复杂度是O(N),空间复杂度是O(N),不用s[::-1]的方式而是逐个遍历的话时间复杂度是O(1)。 class Solution: def validPalindrome(self, s: str) -> bool: def isPalindrome(string): return string == string[::-1] left, right = 0, len(s) - 1 ...

Read more

mq022.字符串相加

题目链接 啊就按部就班地写嘛如1,不过写出来有点慢啊,时间和空间消耗都在后半部分。可能是有什么部分不够优美吧。于是复制了别人的代码如下,思路是完全一样的就细节不太一样别人写得更加简练,于是我也试着用了类似的算carry的方法确实有提升,我还有一部分比较慢的原因是求res的时候用了[-1]可能会慢。这个算法的时间复杂度是O(N),空间复杂度是O(1)。 class Solution: def addStrings1(self, num1: str, num2: str) -> str: def str2num(c): return ord(c)-ord("0") if len(num1) < len(nu...

Read more