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...
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...
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] == ")":
...
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...
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...
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:
...
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)
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...
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
...
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...
260 post articles, 26 pages.