周賽小結
p1:可以統計總的0,1個數,然後從左往右掃,就可以了。看了下資料比較小,就寫的很暴力。
from collections import counter as c
class
solution
:def
maxscore
(self, s:
str)
->
int:
n, ret =
len(s),0
for i in
range
(n):
ifnot s[
0:i]
ornot s[i:]:
continue
ret =
max(ret, c(s[
0:i])[
'0']
+ c(s[i:])
['1'])
return ret
p2:
左邊拿乙個,右邊拿乙個,最後剩下中間的n-k個,一定是連續的。找到連續n-k個元素的最小,就算好了。
wa了兩次,第一次,我是用左邊取i個,右邊取k-i個,然後寫了個遞迴,超時了。第二次忘了。
class
solution
:def
maxscore
(self, a: list[
int]
, k:
int)
->
int:
n,m =
len(a)
,pow(10
,9) dp,k =[0
]*n,n-k
for i,x in
enumerate
(a):
if i !=
0: dp[i]
= dp[i-1]
+x else
: dp[i]
= x for i in
range
(n):
if i+k > n:
break
m =min(m, dp[i+k-1]
-dp[i-1]
)if i !=
0else
min(m, dp[k-1]
)return dp[-1
]- m
p3:
這個題資料規模比較大, 不能遍歷index
但是可以把元素按對角線對齊,第k次操作,需要刪掉第k行的第乙個元素,以及它前面每一行的第乙個元素。如果行沒元素,把行刪了,同時更新k
class
solution
:def
finddiagonalorder
(self, a:[[
int]])
-> list[
int]
: ret,k =
,0while a:
for i in
range
(k,-1,
-1):
ifnot a[i]
:del a[i]
k -=
1continue[0
])del a[i][0
] k +=
1if k <
len(a)-1
else
0return ret
p4:
dp+維護k長度的陣列
**沒幾行, 不過寫了個bug, 刪除元素的時候, 二分搜尋bisect預設使用bisect_right然後的搜尋元素的後乙個座標要減一。
import bisect
class
solution
:def
constrainedsubsetsum
(self, a: list[
int]
, k:
int)
->
int:
dp, m =[0
]*len(a),-
pow(10,
9)mem =
for i in
range
(len
(a))
: dp[i]
= a[i]
iflen
(mem)
< k:
dp[i]
=max
(dp[i]
, a[i]
+m) bisect.insort(mem, dp[i]
)else
: dp[i]
=max
(dp[i]
, a[i]
+mem[-1
])bisect.insort(mem, dp[i]
)del mem[bisect.bisect(mem, dp[i-k])-
1]m =
max(m, dp[i]
)return m
leetcode系列 演算法 第 186 場周賽
右邊的為1的個數,先遍歷一次,計算有多少個1 新增三個變數,left為左半部分0的個數,初始化為0 right為右半部分1的個數,初始化為上一步的統計值 max sum為當前left right的最大值 然後再次遍歷字串,如果是0,則left 1 如果是1,則right 1 更新max sum ma...
leetcode 第132場周賽
愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字n。在每個玩家的回合,玩家需要執行以下操作 如果玩家無法執行這些操作,就會輸掉遊戲。只有在愛麗絲在遊戲中取得勝利時才返回true,否則返回false。假設兩個玩家都以最佳狀態參與遊戲。示例 1 輸入 2輸出 true解釋 愛...
leetcode周賽 第176場
題目描述 給你乙個 m n 的矩陣 grid,矩陣中的元素無論是按行還是按列,都以非遞增順序排列。請你統計並返回 grid 中 負數 的數目。示例 1 輸入 grid 4,3,2,1 3,2,1,1 1,1,1,2 1,1,2,3 輸出 8 解釋 矩陣中共有 8 個負數。示例 2 輸入 grid 3...