找到和最大的长度为 K 的子序列
这是我写的:执行用时: 116 ms,内存消耗: 15.2 MB
class Solution:
def maxSubsequence(self, nums: List[int], k: int) -> List[int]:
res = nums[:k]
for i in range(k, len(nums)):
re = sorted(res)
if nums[i] > re[0]:
res.pop(res.index(re[0]))
res.append(nums[i])
return res
这是大佬写的:执行用时: 36 ms,内存消耗: 15.3 MB
class Solution:
def maxSubsequence(self, nums: List[int], k: int) -> List[int]:
for i in range(len(nums)):
nums[i] = (nums[i], i)
nums.sort(key=lambda s: s[0], reverse=True)
nums = nums[: k]
nums.sort(key=lambda s: s[1])
ans = [i[0] for i in nums]
return ans
我每加一个数都要sort,大佬sort两次就vans了,构造tuple先对值排序再取出前k大的再对index排序,太妙了
适合打劫银行的日子
我交了好多次都超时,太菜了啊啊啊啊啊
这是大佬写的:执行用时: 244 ms,内存消耗: 32.9 MB
class Solution:
def goodDaysToRobBank(self, security: List[int], time: int) -> List[int]:
n = len(security)
pre = [0 for i in range(n)]
for i in range(1, n):
if security[i] <= security[i-1]:
pre[i] = pre[i-1] + 1
post = [0 for i in range(n)]
for i in range(n-2, -1, -1):
if security[i] <= security[i+1]:
post[i] = post[i+1] + 1
res = []
for i in range(time, n - time):
if pre[i] >= time and post[i] >= time:
res.append(i)
return res
总的来说就是三次遍历,相当于提前把条件都计算好,最后很容易就比较出来了,我自己是每次都要sort比较,,太菜了太菜了!!!
引爆最多的炸弹
大佬写的:执行用时: 376 ms,内存消耗: 15.6 MB
class Solution:
def maximumDetonation(self, bombs: List[List[int]]) -> int:
lenb, d = len(bombs), defaultdict(set)
for i, j in product(lenb, repeat = 2):
if math.dist(bombs[i][:2], bombs[j][:2]) <= bombs[i][2]: d[i].append(j)
for j, k in product(lenb, repeat = 2):
if k in d[i]:
d[i] |= d[k]
return max(len(d[i]) for i in range(lenb))
我实在是太菜了,才知道有product这种好东西,, Python itertools模块中的product函数用于求多个可迭代对象的笛卡尔积(Cartesian Product),它跟嵌套的 for 循环等价。即: product(A, B) 和 ((x,y) for x in A for y in B)一样. 它的一般使用形式如下: product(*iterables, repeat=1) iterables是可迭代对象,repeat指定iterable重复几次,即: product(A,repeat=3)等价于product(A,A,A)
序列顺序查询
大佬写的:执行用时: 648 ms,内存消耗: 37.1 MB
from sortedcontainers import SortedList
class SORTracker:
def __init__(self):
self.checkNo = 0
self.arr = SortedList([])
def add(self, name: str, score: int) -> None:
self.arr.add((-score, name))
def get(self) -> str:
self.checkNo += 1
return self.arr[self.checkNo-1][1]
我也是才知道SortedList这种好东西,,看来这次双周赛python真的赢麻了hh