私は有名な勝利オファーは、白いブラシを磨くための方法で、売春のleetcodeが起こっている可能性があることを聞きました。
しかしleetcode上の安全プランを証明するために簡単な質問は、上記のオリジナルの本は、すべての困難なことではありませんかわからない、ですか?あるいは、実際のジョブの検索に行くまでのペアを購入。
ADOは、第六のタイトルに続く第3に要約されるように。
3番目の質問:配列番号の重複
この質問は本当に、人々は単にプログラミングを学ぶかもしれませんが、一日か二日のアイデアがあるだろうと言うことは難しいことではありません。
ここでは、約2つのアイデアがあります。
辞書に表示されない場合は1、辞書(ハッシュ)は、各要素を、それが辞書に新しいキーです。辞書で(この要素の前にそこに説明されている)がある場合、直接返します。(何も議論していないので、この方法では省略する)
2、「のタイトルに注意してくださいすべての数字は、n-1は、〜0の範囲にあり、我々は考えることができる」と。各要素は、位置にそれを置く必要があります
図の例では栗上記1。:
- 番号2の最初のポインタは、それが上のアレイであろう位置2つの [1、3、2、0、2、5、3]の要素(この場合には素子2の位置が2ではない)スワップ1
- 第3番へのポインタ、それは上の配列であろう3つの位置要素(この場合には素子3が3位ではない)0が逆:[1、0、2、3、2、5、3]
- 第3の数2へのポインタ、ケース2は、その位置の放電に配置されます。
- 4桁目3へのポインタ、ケース3は、放電のその位置に配置されます
- 5桁目2へのポインタが、:この場合、位置2は要素2を有し、繰り返すことができる素子2が決定され、戻り素子2。
コードは以下の通りであります:
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
for i in range(len(nums)):
while nums[i] != i:
if nums[i] == nums[nums[i]]:
return nums[i]
nums[nums[i]] , nums[i] = nums[i] , nums[nums[i]]
return None
ノートへのポイントは、クロス割り当ての最後から二番目の行ということがありますされて
、私は気付かなかったの前には、書きました:
nums[i], nums[nums[i]] = nums[nums[i]], nums[i]
最後に、なぜそれである、エラー?
、B = B:検索後、私は、クロス割り当てのことを見出した
プロセスである:第1の点bがオブジェクトを表し、その後にB点オブジェクト代表ここで(オブジェクトの代表の元Aの代表を意味しますオブジェクト)
したがって、上記式中、NUMS [NUMS [I](の左側にプロセスB時間)を算出し、NUMS [I](処理工程は)変更されています。
。
第四に質問:2次元配列のルックアップ
この問題は行います者の一人だったが、まだ少しトリックのタイトルを必要とします。
この質問は、最も重要な条件である:「増分の列は、行インクリメント」
そうを、見つけるために暴力のサイクルのための2つに加えて、簡単な方法があります。
- ターゲットと比較される左下の観測素子アレイ、
- ターゲット要素よりも大きい場合、その要素は、列を持つことができない場合、ターゲット(列は要素より小さいため)。したがって、唯一の私達の次のステップのN×(M-1)の右欄は、配列を検索します
- ターゲットは以下の要素を超える場合、その要素は、ライン上に位置するターゲットを持つことができない(線要素が平均よりも大きくなるように)。したがって、我々は次のに使用されるカラムの頂部を見つけるために、N-1 * Mアレイ
- ターゲットが要素に等しい場合、Trueを返します
、偽が返された見つからないのであれば、上に行きます。
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
i, j = len(matrix)-1, 0
while i >= 0 and j <= len(matrix[0])-1:
if target > matrix[i][j]:
j += 1
elif target < matrix[i][j]:
i -= 1
else:
return True
return False
。
第五質問:スペースを置き換えます
この問題は...何も言うことはありません。
これは、Pythonの文字列を変更することはできません、注目すべきことです!
前に、私は「20%。」あなたはスペースが発生した場合は、要素を変更し、各要素をされることを考えていた
。もちろん、必然的にされて、失敗した文字列を無視しては、変更することはできません
その後、私が考えていた:もし文字列を再構築し、スペースを横断しました:
s = s[:i] + "%20" + s[i+1:]
これは機能しますが、毎回のスペースを再構築した文字列にする必要があります。費用は高すぎます。
だから、最終的にはストレージのリストの方法で採択され、最後にメソッドの戻りに参加します:
class Solution:
def replaceSpace(self, s: str) -> str:
res = []
for c in s:
if c == ' ': res.append("%20")
else: res.append(c)
return "".join(res)
。
質問6:ヘッドに尾からのリストを印刷します
この問題は逆のメソッドが返すイテレータ、それをインスタンス化するために使用リスト()への必要性に注意してください。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reversePrint(self, head: ListNode) -> List[int]:
s = []
while head:
s.append(head.val)
head = head.next
return list(reversed(s))