leetcode試験整理
今日leetcode第159 contest試験を受けて、2つの問題を作りました.1番と2番の問題しかできなかった.第三題の問題はあまり分からなかった.4番目の問題はdp問題で、とても弱いです.
1つ目の問題は、与えられた点が1つの線にあるかどうかを判断することです.明らかに、傾きが一致しているかどうかを判断すればいいのです.ただし分母が0の場合は気をつけましょう.2番目の問題はパスに含まれる問題です.例えば/a/b/a/b/c/aの3つの最後の結果は/aで、ここで私はまず/の多少で並べ替えて、それから順番にそれぞれを取り出して、スラッシュの個数によって循環して、最終的な結果の中に含まれていないならば、入れて、含んでいればpass、breakが出てきます.
3番目の問題は1つの文字列に与えられ、「Q」、「W」、「E」and「R」しか含まれていない.ここではバランスのとれた文字列を得る必要があります.各文字列の数は同じでなければなりません.サブ文字列を探す必要があります.このサブ文字列は文字列の一部を置き換えた後、文字列をバランスのとれた文字列にします.問題の構想はスライドウィンドウを採用することである.
4番目の問題はdp問題です.この問題は後でleeの答えを見て、不思議な感じがして、専門的に整理しました.この問題は主にあなたに開始時間のリスト、終了時間のリスト、仕事をする収益のリストをあげます.開始時間、終了時間に基づいて、衝突しない期間を選択して最大の収益を得る必要があります.
1つ目の問題は、与えられた点が1つの線にあるかどうかを判断することです.明らかに、傾きが一致しているかどうかを判断すればいいのです.ただし分母が0の場合は気をつけましょう.2番目の問題はパスに含まれる問題です.例えば/a/b/a/b/c/aの3つの最後の結果は/aで、ここで私はまず/の多少で並べ替えて、それから順番にそれぞれを取り出して、スラッシュの個数によって循環して、最終的な結果の中に含まれていないならば、入れて、含んでいればpass、breakが出てきます.
3番目の問題は1つの文字列に与えられ、「Q」、「W」、「E」and「R」しか含まれていない.ここではバランスのとれた文字列を得る必要があります.各文字列の数は同じでなければなりません.サブ文字列を探す必要があります.このサブ文字列は文字列の一部を置き換えた後、文字列をバランスのとれた文字列にします.問題の構想はスライドウィンドウを採用することである.
def balancedString(self, s):
count = collections.Counter(s)
res = n = len(s)
i = 0
for j, c in enumerate(s):
count[c] -= 1
while i < n and all(n / 4 >= count[c] for c in 'QWER'):
#
res = min(res, j - i + 1)
count[s[i]] += 1
i += 1
return res
4番目の問題はdp問題です.この問題は後でleeの答えを見て、不思議な感じがして、専門的に整理しました.この問題は主にあなたに開始時間のリスト、終了時間のリスト、仕事をする収益のリストをあげます.開始時間、終了時間に基づいて、衝突しない期間を選択して最大の収益を得る必要があります.
import bisect
class Solution:
def jobScheduling(self, startTime, endTime, profit):
jobs = sorted(zip(startTime, endTime, profit), key=lambda v: v[1])
dp = [[0, 0]]
for s, e, p in jobs:
# , 。
i = bisect.bisect(dp, [s + 1]) - 1
# , dp p , , dp 。
# , job 。
# , 。
if dp[i][1] + p > dp[-1][1]:
dp.append([e, dp[i][1] + p])
return dp[-1][1]
startTime = [1,2,3,3]; endTime = [3,4,5,6]; profit = [50,60,40,70]
target = 120
m = Solution().jobScheduling(startTime, endTime, profit)
print(m)