[アルゴリズムブラッシング問題] 3つの数字の和を解くための2つのヒント

> 問題: 15. 3 つの数値の合計

一連の考え

この質問自体は、解が重複する可能性があることに注意する必要があります。Python では、この種のリストのネストされたリストを重複排除するために set を使用できません。おそらく、リストがハッシュタイプの形式で表現できないためです。setはkey:valueの形式でデータを表現する必要があるため、最終的に表現するのはやはり難しいです。

問題解決法

ここで問題を解決するときも、ダブル ポインタの解決策が考慮されます。効率を高めるために、前処理された配列をソートする必要があります。これにより処理が高速化されます。
長さが 3 未満のデータ、または負の数を含まないデータの場合は、プログラムの実行速度を向上させる特別なソリューションを提供する必要があります。

複雑さ

  • 時間計算量:

時間計算量を追加します。例: O ( n 2 ) O(n^2)O ( n2 )

  • 空間の複雑さ:

空間の複雑さを追加します。例: O ( 1 ) O(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
        

Guess you like

Origin blog.csdn.net/qq_27180763/article/details/129477402