> 問題: 15. 3 つの数値の合計
一連の考え
この質問自体は、解が重複する可能性があることに注意する必要があります。Python では、この種のリストのネストされたリストを重複排除するために set を使用できません。おそらく、リストがハッシュタイプの形式で表現できないためです。setはkey:valueの形式でデータを表現する必要があるため、最終的に表現するのはやはり難しいです。
問題解決法
ここで問題を解決するときも、ダブル ポインタの解決策が考慮されます。効率を高めるために、前処理された配列をソートする必要があります。これにより処理が高速化されます。
長さが 3 未満のデータ、または負の数を含まないデータの場合は、プログラムの実行速度を向上させる特別なソリューションを提供する必要があります。
複雑さ
- 時間計算量:
時間計算量を追加します。例: O ( n 2 ) O(n^2)O ( n2 )
- 空間の複雑さ:
空間の複雑さを追加します。例: O ( 1 ) O(1)○ (1)
コード
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums = sorted(nums)
res_list = []
for index in range(0,len(nums)):
if nums[index] > 0:
break
if len(nums) < 3:
break
L = index + 1
R = len(nums) - 1
while L < R:
if nums[index] + nums[L] + nums[R] == 0:
item = [nums[index],nums[L],nums[R]]
if item not in res_list:
res_list.append(item)
while L<R and nums[L] == nums[L+1]:
L = L + 1
while L < R and nums[R] == nums[R-1]:
R = R - 1
L = L + 1
R = R - 1
elif nums[index] + nums[L] + nums[R] > 0:
R = R - 1
elif nums[index] + nums[L] + nums[R] < 0:
L = L + 1
return res_list