鎬濊礬涓錛堥熷害涓鑸級錛?br />鍏坰ort list錛屾灇涓劇涓涓暟i=1~n-2錛岀劧鍚庤緗袱涓父鏍囷紝宸﹁竟浠巌+1鍚戝彸錛屽彸杈逛粠n鍚戝乏錛屽鏋滀袱涓父鏍囧搴旂殑鏁頒箣鍜屽皬浜?nums[i]錛岀涓涓父鏍囧彸縐伙紝鍚﹀垯絎簩涓彸杈瑰乏縐伙紝濡傛灉姝eソ絳変簬-nums[i]錛岀湅鏄惁涓庡墠涓涓猻et閲嶅錛屼笉閲嶅鍒欏姞鍏ョ瓟妗?br />涓寮濮嬪皾璇曡褰曟墍鏈夌瓟妗堬紝鏈鍚庡幓閲嶏紝浼歍LE錛岃竟澶勭悊杈瑰垽閲嶉渶瑕佹敞鎰忔柟寮忥紝褰撶瓟妗堥泦鍚堜負絀烘垨鑰呬笉鏄紙絎竴涓暟涓庝笂涓涓瓟妗堜竴鏍風浜屼釜鏁板嵈灝忎簬絳変簬涓婁竴涓瓟妗堬級鏃訛紝鍔犲叆絳旀闆嗗悎
if tp == [] or not (nums[i] == tp[-1][0] and nums[pos1] <= tp[-1][1]):
"
鍙互鐢ㄤ互涓媍ase鍋氭祴璇曪紙鑷繁涔嬪墠鐨凮utput涓嶈兘閫氳繃榪欎釜case錛學A浜嗕竴嬈★級錛?br />"
Input:
[-4,-2,-2,-2,0,1,2,2,2,3,3,4,4,6,6]
Output:
[[-4,-2,6],[-4,0,4],[-4,1,3],[-4,2,2],[-2,-2,4],[-2,0,2],[-2,-2,4],[-2,0,2]]
Expected:
[[-4,-2,6],[-4,0,4],[-4,1,3],[-4,2,2],[-2,-2,4],[-2,0,2]]
"
Runtime: 6730 ms, faster than 9.07% of Python online submissions for 3Sum.
Memory Usage: 16.7 MB, less than 79.63% of Python online submissions for 3Sum.
1 #15
2 #Runtime: 6730 ms
3 #Memory Usage: 16.7 MB
4
5 class Solution(object):
6 def threeSum(self, nums):
7 """
8 :type nums: List[int]
9 :rtype: List[List[int]]
10 """
11 nums.sort()
12 d = {}
13 for i in range(len(nums)):
14 d[nums[i]] = i
15 tp = []
16 ans = []
17 for i in range(len(nums)):
18 pos1 = i + 1
19 pos2 = len(nums) - 1
20 while pos1 < pos2:
21 if nums[pos1] + nums[pos2] == -nums[i]:
22 if tp == [] or not (nums[i] == tp[-1][0] and nums[pos1] <= tp[-1][1]):
23 tp.append([nums[i], nums[pos1], nums[pos2]])
24 pos1 += 1
25 pos2 -= 1
26 elif nums[pos1] + nums[pos2] > -nums[i]:
27 pos2 -= 1
28 else:
29 pos1 += 1
30 return tp
鎬濊礬浜岋紙姣旀濊礬涓蹇竴鐐癸級錛?br />鍏坰ort錛屽啀鐢╠ict璁板綍榪欎竴鍒楁暟閲岄潰姣忎竴縐嶅兼渶鍚庡嚭鐜扮殑涓嬫爣浣嶇疆
涓ら噸for寰幆鏋氫婦鍓嶄袱涓暟i錛宩錛岀湅絎笁涓暟鍦ㄤ笉鍦╠ict閲岋紝濡傛灉鍦ㄧ殑璇濓紝瑕佹眰涓嬫爣k>j>i錛屼笌鎬濊礬涓涓鏍鳳紝娉ㄦ剰鍒ゆ柇鏄惁涓庣幇鏈夌殑鏁伴噸澶嶏紝濡傛灉鍏ㄩ儴鍔犲叆緇撴灉闆嗗悎鏈鍚庡啀鍒ら噸浼歍LE
Runtime: 3584 ms, faster than 21.33% of Python online submissions for 3Sum.
Memory Usage: 17.2 MB, less than 19.67% of Python online submissions for 3Sum.
1 #15
2 #Runtime: 3584 ms
3 #Memory Usage: 17.2 MB
4
5 class Solution(object):
6 def threeSum(self, nums):
7 """
8 :type nums: List[int]
9 :rtype: List[List[int]]
10 """
11 nums.sort()
12 d = {}
13 for i in range(len(nums)):
14 d[nums[i]] = i
15 tp = []
16 ans = []
17 for i in range(len(nums)):
18 for j in range(i + 1, len(nums)):
19 if -(nums[i] + nums[j]) in d:
20 k = d[-(nums[i] + nums[j])]
21 if k > j and (tp == [] or not (nums[i] == tp[-1][0] and nums[j] <= tp[-1][1])):
22 tp.append([nums[i], nums[j], nums[k]])
23 return tp