0.試合後のまとめ
今回のゲームは本当に大きな車を転覆させました、それはほとんど不可能でした、そして転覆した車の理由は非常に奇妙です:トピックが単純すぎるからです。。。
残念ながら、見てみたところ、最初のビッグガイを獲得するのに8ポイント以上かかったのですが、結果をスピードアップするために特に明確だとは思わなかったので、3回間違えました。不思議なことに、3回は非常に不正行為です。50分かかりましたが、ほとんど受け入れられませんでした。結果は1時間5分でした。国内ランキングは150近く下がり、世界ランキングは400以上下がりました。、ああ、私の不注意はいつ完全に修正されますか。。。
ところで、この大会の結果は中国で434、世界で1089です。上位10%に入らなかったのはとても悲劇的です。私は本当に嫌です!!!
将来はまだ気になりません。気になると温かい豆腐が食べられません。。。
さて、後で運が良かったことがわかりました。4番目の質問に対する私の解決策は実際には欠陥がありました。ブログを書いているときに、考えを整理して見つけました。幸い、テストサンプルは十分に包括的ではありませんでした。なんとか逃げることができました。私は幸運でした。幸運でした。。。
幸運です。ほとんど不可能です。突然、Leetcodeがテストサンプルが不完全であることに気付いたので、4番目の質問をキャンセルしました。4番目の質問は完了していないと判断され、ランキングは1000に下がりました。国内で。名前が近いです!
非常に簡単です。不完全なテストサンプルの問題を彼らがどのように発見したかについては話さないでください。間違ったサンプルを見せてくれた場合は、直接修正することもできます。問題ではなく、彼ら自身の仕事の間違いです。本当に直接対処するのはシンプルで失礼、そして一日の良い気分は突然台無しになります、F ** K!
1.トピック1
質問1に与えられた質問へのリンクは次のとおりです。
1.問題解決のアイデア
この問題を解決するというアイデアは非常に簡単です。リスト内の文字列を連結して、最終的な連結結果を比較するだけです。
2.コードの実装
最終的なPythonコードは次のとおりです。
class Solution:
def arrayStringsAreEqual(self, word1: List[str], word2: List[str]) -> bool:
return "".join(word1) == "".join(word2)
コード行については、評価のためにコードを送信して取得します。44ミリ秒かかり、14.2MBのメモリを消費します。
2.トピック2
トピック2のテスト問題へのリンクは次のとおりです。
1.問題解決のアイデア
もちろん、この質問は再帰的な方法を使用して実装できますが、最終的な回答を作成する方法は、可能な限り前面に入力することであるため、回答を直接作成する方が簡単ですa
。
最終結果にxxa
があるとしますxか月、z
そこにzzz、他の塗りつぶし文字(正確に1つ)はy
、次のとおりです。
{x⋅1+1⋅y+z⋅26= kx + 1 + z = n \ left \ {\ begin {aligned} x \ cdot 1 + 1 \ cdot y + z \ cdot 26 = k \\ x + 1 + z = n \ end {aligned} \ right。 {{ バツ⋅1+1⋅Y+と⋅2 6=kバツ+1+と=n個
変換は次のとおりです
。y+25⋅z= k − n + 1 y + 25 \ cdot z = k-n + 1Y+2 5⋅と=k−n+1
その中で、yの値の範囲は1〜26です。
したがって、次のように解くことができ
ます。 {k-n + 1} {25}} \ rfloor&if \ y> 1 \\ z = \ lfloor {\ frac {k-n + 1} {25}} \ rfloor -1&if \ y \ leq 1 \ end {cases}{{
と=⌊2 5K - N + 1⌋と=⌊2 5K - N + 1⌋−1i f y >>1i f y ≤1
2.コードの実装
Pythonコードは次のとおりです。
class Solution:
def getSmallestString(self, n: int, k: int) -> str:
z = (k-n+1) // 25
y = (k-n+1) % 25
if y <= 1 and z > 0:
y += 25
z -= 1
x = n-z-1
return x*'a' + chr(ord('a')+y-1) + z*'z'
コード評価を送信して取得:40ミリ秒かかり、15.2MBのメモリを消費します。
現在の最適なコード実装には24ミリ秒かかりますが、それを見ると本質的に直接検索になりますが、彼はyとzを決定する方法をさらに最適化したようです。興味のある読者はここでそれをチェックできます。
3.トピック3
トピック3のテスト問題へのリンクは次のとおりです。
1.問題解決のアイデア
3番目の質問は私が今回遭遇した最大の質問です。怠惰になるために膨大な時間が無駄になりました。その結果、鶏を盗んでもお金を失うことはありません。。。
この質問のアイデアは実際には非常に単純です。つまり、各値をトラバースし、各値が削除された後の変更を検討することです。
各値を削除すると次の値が加算されるため、後部番号のIDのパリティが逆になります。したがって、前部と後部の奇数パリティにすべて同じパリティ番号の合計を記録するだけで済みます。 。数の合計は、前に異なるパリティを持つすべての数の合計に等しく、後ろに同じパリティを持つすべての数の合計に等しいです。
注意が必要なのは限界の問題だけです。これには注意してください。
2.コードの実装
Pythonコードは次のとおりです。
class Solution:
def waysToMakeFair(self, nums: List[int]) -> int:
n = len(nums)
l = [0 for i in range(n+2)]
r = [0 for i in range(n+2)]
for i in range(n):
l[i+2] = l[i] + nums[i]
r[n-i-1] = r[n-i+1] + nums[n-i-1]
ans = 0
for i in range(n):
if l[i+1]+r[i+2] == l[i] + r[i+1]:
ans += 1
return ans
評価のためにコードを送信した後、1644ミリ秒かかり、23.7MBのメモリを消費しました。
現在の最適なコードの実装には1356msかかります。彼の実装のアイデアを見ると、とにかく同じであるはずです。すべてO(N)O(N)です。O (N )アルゴリズムの複雑さ、拡張することはあまりありません。
4.トピック4
質問4のテスト問題へのリンクは次のとおりです。
1.問題解決のアイデア
えーと、今回は運が良かったので、ゲーム中に出た解決策はテストに合格しましたが、実は少し問題がありました。。。
悲しいかな、運が良いです、運が良いです。。。
実際の解決策は、私たちの元のアイデアと大差ありません。まず第一に、すべてのタスクを完了したい場合、明らかに必要なエネルギーは少なくともすべてのタスクに実際に必要なエネルギーであり、次に重要なのは、補う必要のある違いを考慮することです。
違いの選択に関しては、タスク選択の順序を相関させる必要があります。明らかに、違いが大きいほど、エネルギーがまだ十分であるときにできるだけ早く完了する必要があり、同じ違いの下で、より大きくなります。エネルギーが必要な場合は、活用したいと考えています。エネルギーが十分である限り、できるだけ早く終了してください。
したがって、タスクを並べ替えてから、必要なエネルギー差を計算します。
2.コードの実装
最終的なコードの実装は次のとおりです。
class Solution:
def minimumEffort(self, tasks: List[List[int]]) -> int:
tasks = sorted(tasks, key=lambda x: (x[1] - x[0], x[1]), reverse=True)
cost = sum(x[0] for x in tasks)
remain = cost
for x, y in tasks:
if remain < y:
cost += y - remain
remain = y
remain -= x
return cost
評価のためにコードを送信した後、1284ミリ秒かかり、59.5MBのメモリを消費しました。
現在の最適なコードの実装には1248msかかります。それを見てみると、全体的にほぼ同じなので、あまり拡張しません。