私のコード:時間限定
1 DEF threeSum(NUMS): 2 "" " 3 :タイプNUMS:リスト[INT] 4 :RTYPE:リスト[リスト[INT] 5 """ 6 DEF twoSum(A、B、C): 7 もし + B + C == 0: 8 リターン真 9 他: 10 リターン偽 11の 12の RES = [] 13 のための I における範囲(LEN(NUMS)-2 ): 14 =のNUMS [I] 15 のための J で範囲(I + 1、lenの(NUMS)-1 ): 16 B = NUMS [J] 17 K = J +1 18 #プリント(I、J、K、A、B、NUMS [K]) 19 一方、 K < LEN(NUMS): 20 プリント(A、B、NUMS [K]) 21 ならtwoSum(A、B、NUMS [K]): 22 プリント(' ... ' 、A、B、NUMS [K]) 23 TEMP = [A、B、NUMS [K] 24 temp.sort() 25 プリント(' ... TEMP ' 、TEMP) 26 もしTEMP ない でRES: 27 res.append(TEMP) 28 プリント(' ... RES ' 、RES) 29 K + = 1つの 30 戻り RES
アイデア:
1、n個の* nの時間複雑
ソート(WT1:なぜソート?) - 「辞書レコードの値の構築:数 - 」第三の数を判断しないで続けて2サイクルは、また、2サイクル(DICに使用されるレコード数)の値と等しくありません
1 クラス溶液(オブジェクト): 2 3 '' ' 4 はO(n ^ 2)时间复杂度 5 6 ''' 7 DEF threeSum(自己、NUMS): 8 ""」 9 :タイプNUMS:リスト[INT] 10 :RTYPE:リスト[リスト[INT] 11 ""」 12 結果= [] 13 num_cnt_dict = {} 14 15 のために NUM にNUMS: 16 num_cnt_dict [NUM] = num_cnt_dict.get(NUM、0)+ 1 17 18 もし 0 でnum_cnt_dict と num_cnt_dict [0]> = 3 : 19 result.append([0、0、0]) 20 21 NUMS = ソート(リスト(num_cnt_dict.keys())) 22 23 のために I、NUM に列挙(NUMS): 24 のための J で NUMS [I + 1 :]: 25 であれば NUM * 2 + J == 0 と num_cnt_dict [NUM]> = 2 : 26 result.append([NUM、NUM、J]) 27 なら j個* 2 + NUM == 0 と num_cnt_dict [J]> = 2 : 28 result.append([J、J、NUM]) 29 30 = 0のdiff - NUM - J 31 であれば差分> J との差分でnum_cnt_dict: 32 result.append([NUM、J、差分]) 33 リターン結果
道のうち、次の回は、おそらくことに注意してください別のリストとdict.keys()を取得する方法を見つけます
NUMSにおける差分> Bと差分場合 :#があれば前に重ならないようにするために、A> Bを留意すべきである res.append([A、B、差分])は RESを返します
2、N * Mただし、n + mはLEN(NUMS)
建設辞書 - 「正と負に、DICのキーをソートしない - 」2つのサイクルのために
次の行を注意:フィルタは、列の増分数を取得するためにあるので!!!!!!!diffがより小さいとき、I = diffがあるため、この状態で、説明するときは、最終的な結果に【、B、差分]にまだ満たされていません
もし差分<a又はdiff> B:
res.append([A、B、差分])
1 クラス溶液(オブジェクト): 2 3 '' ' 4 はO(n ^ 2)时间复杂度 5 6 ''' 7 DEF threeSum(自己、NUMS): 8 ""」 9 :タイプNUMS:リスト[INT] 10 :RTYPE:リスト[リスト[INT] 11 ""」 12の RES = [] 13 DIC = {} 14 のための項目でNUMS: 15 DIC [商品] = dic.get(項目、0)+ 1 16 であれば 0 で DIC および DIC [0]> = 3: 17 res.append([0,0,0]) #-なぜなら、この場合に加えて、3人のループ数は、」0に等しく、もはや現れる理由は、別々にリストされるべきではない 18は #= NUMSソート(リスト(dic.keys())) 19。 NEG =リスト(フィルタ(ラムダ X:X < 0、dic.keys())) 20が POS =リスト(フィルタ(ラムダ X:X> = 0、dic.keys ())) 21がある ためにNEG: 22である ため B における POS: #-1 jはLEN(NUMS有界されていない理由) -偶然の第3の数とNUMS [j]をがあるかもしれないので、」に等しい 23が 差分= 0 - A - B 24 IF差分でDIC: 25 もし差分における(B)及び DIC [差分]> = 2 : 26 res.append([A、B、差分]) 27 であれば差分<a 又は diff> B: 28 res.append([B 、差分]) 29の リターン RES