LeetCode- 세의 수 (,, 고정 된 수의 정렬은 다른 두 개의 더블 포인터 번호를 찾고)

배열 nums의 n은 정수를 포함 감안 세 요소의 C nums되도록 + B + C = 0, A, B가 존재하는지의 여부를 판정한다? 모든 조건이 중복 된 트리플을 찾을 만족하지 않습니다.

주 : 대답은 중복 트리플을 포함 할 수 없습니다.

예를 들어, 어레이의 nums = 주어진 [-1, 0, 1, 2, -1, -2,

트리플로 설정된 요건을 충족 :
[
   [-1, 0, 1],
   [-1, -1, 2
]

출처 : 유지 버튼 (LeetCode)
링크 :
https://leetcode-cn.com/problems/3sum

분석 :

폭력 O의 복잡성 (N ^ 3) 타임 아웃 확실히

먼저 이중 포인터 방법 (K1)에 의해 다시 보면 그 K1 <K2 =에게 <= K3, 고정 제, K1, K2 및 K3 가정 배열을 정렬

당신은 자연을 활용할 수 있습니다 :

1. (K1)는 0보다 크고, 0, 스킵 K1 동일하지 확실히 셋의 합이면

2. V [I] == 브이 [I-1, I-1 다음은 생략 할 수있는 경우, 이것은 필연적으로 재현 결과를 가져올 것이기 때문에

세트를 사용할 수있다 중복 결과를 제거

시간 복잡도 : O (N ^ 2)

정렬의 복잡도가 O (N * N 로그)이지만, 그 후의 정착이 두 포인터를 볼 + 복잡도가 O 인 중 큰 (N ^ 2), 시간 복잡도는 O (N ^ 2)

우주의 복잡성 : 빠른 방전 요구, 최상의 경우 : O (N 로그), 최악의 경우 : O (N)

 

암호:

클래스 해결 {
 공개 : 
벡터 <벡터 < INT >> threeSum (벡터 < INT > & a) 
{ 
    벡터 <벡터 < INT >> 절; 
    벡터 < INT > V;
    설정 <벡터 < INT >> S;
    설정 <벡터 < INT >> ::를 반복자;
    INT N = a.size ();
    경우 (N < 3 )
         복귀 VV; 
    종류 (a.begin (), a.end ());
    K = 0 ; K <N- 2 k 번째 ++ ) 
    { 
        경우 (a [K]가> 0 )
             계속 ;
        경우 (K> 0 && A [K- 1 ] == A [K])
             계속 ;
        INT의 L = K + 1 ;
        INT의 H = N- (1) ;
        // COUT << "K ="<< K << "L ="<< L << "H ="H << << ENDL; 
        s.clear ();
        반면 (L < H) 
        { 
            INT ANS = A [K] + A [1] + A [H];
            //COUT << "L ="<< L << "H ="H << << "ANS ="<< ANS << ENDL; 
            경우 (ANS == 0 ) 
            { 
                v.clear (); 
                v.push_back (a [K]); 
                v.push_back (a [1]); 
                v.push_back (a [H]); 
                s.insert (V); 
                리터 ++ ; 
                시간 - ; 
            } 다른  경우 (ANS < 0 ) 
            { 
                L ++ ; 
            } 다른  경우 (ANS>- ; 
            } 
        } 
        경우 (s.size ()! = 0 ) 
        { 
            위해은 (는 s.begin을 () =,! = 그것이 s.end을 ();는 ++ ) 
            { 
                vv.push_back ( * IT); 
            } 
        } 
    } 
    반환 절; 
} 
};

 

 

추천

출처www.cnblogs.com/yinbiao/p/11311199.html