1. 出現の固有番号:https://leetcode-cn.com/problems/unique-number-of-occurrences/
あなたの整数の配列を与えるために arr
、配列内の各番号の出現回数を数える助けてください。
各番号の出現回数が一意である場合は、返し true
、そうでない場合 false
。
独自のメソッド:
1 クラス溶液(オブジェクト): 2 DEF uniqueOccurrences(自己、ARR): 3 "" " 4 :型ARR:リスト[INT] 5 :RTYPE:BOOL 6 """ 7 count_list = リスト() 8 one_arr = セット(ARR ) 9 ため each_arr でone_arr: 10 count_list.append(arr.count(each_arr)) 11 場合でlen(count_list)== LEN(セット(count_list)): 12 リターン真 13 他: 14 リターン 偽
アイデア:重量によって、第2セットに行きます
収穫:カウンター、カウンターが発生することがわかった良いことは、コレクションから辞書を呼び出すことができるカウンターをインポート
2.ポイントキャンディ
異なる図面は、キャンディの異なるタイプを表すにも長さの配列を、与えられ、各番号は、キャンディを表します。あなたは弟と妹にも同様にこれらのキャンディーを配置する必要があります。キャンディ妹が利用できる最大の種の数を返します。
https://leetcode-cn.com/problems/distribute-candies/
クラス溶液(オブジェクト): DEF distributeCandies(自己、キャンディー): "" " :タイプキャンディ:リスト[INT] :RTYPE:INT """ A = LEN(キャンディー)/ 2 B = LEN(セット(キャンディー)) result_num = もし B> それ以外のBの リターン result_num
アイデア:統計に非常に曲がりくねったスタート後にこの状態であっても長さが重要であることがわかりました
3. Teppoフィボナッチ数列 https://leetcode-cn.com/problems/n-th-tribonacci-number/
次のようにTeppoフィボナッチ数列Tnが定義されています。
T0 = 0、T1 = 1、T2 = 1、かつn> = 0のTnの条件で+ 3 =のTn +のTn + 1 + Tnは+ 2
整数あなたを与えるのn、n番目のフィボナッチ数TeppoのTnの値を返却してください。
クラス溶液(オブジェクト): DEF トリボナッチ(自己、N): "" " :タイプN:INT :RTYPE:INT """ であれば、n個の== 0: リターン0 であれば、N == 1 : リターン 1 であれば、N == 2 : リターン 1 、A = 0 、B = 1 、C = 1 のために NUM における範囲(3、N + 1 ): 合計 = A + B + C =B B = C 、C = 合計 リターン合計
アイデア:蓄積、他の人のコードは、キャッシュ、ハダウン自由研究を学んだ読みます
輸入functools
@functools.lru_cache(None)
4.株式を売買するための最良の時間 https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/
i番目の要素が与えられた株式のi日の価格である配列を、与えられました。
あなたが得ることができる最大の利益を計算するアルゴリズムを設計します。あなたは、可能な限り(株式を売買)より取引を閉じることができます。
注:同時に複数のトランザクション(あなたは秋の前に再び株式を購入する前に売却しなければならない)に関与することはできません。
クラスのソリューション: DEF maxProfit(自己、価格:リスト[INT]) - > int型: 結果 = 0 のための I での範囲(1 、LEN(価格)): TMP =価格[i]は-価格[I - 1 ] の場合、TMP > 0:結果+ = tmpに 戻り結果
考える:私は、TATは、他の人のアイデアを読んで問題外これをしませんでした
単一の取引日:今日売る、買うために前日、収入はP2-P1であります
継続的な成長:買うために私たちの最初の日、あなたは毎日の取引PN-P1 =(P2-P1)+(P3-P2)で同等である最後の日を、販売することができます+ ... +(PN-PN-1)
連続の減少:売買しないでください
5.効果的な異所性文字の単語 https://leetcode-cn.com/problems/valid-anagram/
二つの文字列が与えられ 、S と T を決定するために、書き込み機能を tの かどうか 、Sの 文字異所言葉。
クラスのソリューション(オブジェクト): デフisAnagram(自己、S、T): "" " :タイプS:STR :タイプT:STR :RTYPE:BOOL """ もし!lenは(S)= LEN(T): 返す偽 s_list = リスト(S) t_list = リスト(T) s_list.sort() t_list.sort() のために NUM での範囲(0、LEN(S)): 場合 s_listは[NUM] =!t_list [NUM]: 返すFalseの リターン真
アイデア:自分のアイデアがない同じ長さでは間違いではない場合、で、その後、2種類を比較します
2によって、その後の文字が設定されているものによって使用される単語を繰り返してもらう、とし、他の人のアイデアを参照してください。
2つのカウントが異所性同じ単語であれば、回数を実施
6.レプリケーションゼロ https://leetcode-cn.com/problems/duplicate-zeros/submissions/
あなたの整数の固定長配列を与えるARR、あなたは各配列をゼロレプリケーションが再び発生し、パンの右の残りの要素されています。
注:配列の長さにわたって位置にある要素を記述しないでください。
要件:、その場で上記の変更の配列を入力関数から何も返さないでください。
クラスのソリューション(オブジェクト): デフduplicateZeros(自己、ARR): "" " :型ARR:リスト[INT] :RTYPE:なしインプレース代わりにARRを変更し、何も返さないでください """ NUM = 0 しばらく NUM < LEN(ARR): 場合 [NUM] == ARR 0: arr.insert(numは、0) arr.pop() NUM = NUM + 2 他: NUM = NUM + 1
アイデア:アイデアは、次の次は0の独自の挿入をスキップするためリコールを挿入するために0をポップ何もありません
私はこの方法を挿入しないで見て
インデックスは0を、検出された後の範囲(指数、LEN(ARR))の値を変更するため、最後にインデックス+ 1 = 0の
7.要素削除 https://leetcode-cn.com/problems/remove-element/を
配列NUMSと値valを考えると、あなたはすべて同じ値valを削除するために要素を配置する必要があり、除去後の配列の長さを返します。
配列のための余分なスペースを使用しないでください、あなたは代わりに入力配列を変更し、使用のO(1)余分なスペースの条件の下で完了しなければなりません。
要素の順序を変更してもよいです。あなたは、新しい配列の長さの後ろの要素を超えて検討する必要がありません。
クラス溶液(オブジェクト): DEF removeElement(自己、NUMS、ヴァル): "" " :タイプNUMS:リスト[INT] :タイプヴァル:INT :RTYPE:INT """ NUM = 0 一方 NUM < LEN(NUMS): もし NUMS [NUM] == ヴァル: nums.remove(NUMS [NUM]) 他: NUM = NUM + 1
アイデア:アイデアは、それの何も考えていないし始めている突然ビット無知、無料の補習を削除する原理を削除