Python의 두 포인터 템플릿

4679 단어 pythonalgorithms

투 포인터 기법이란?



두 포인터 기술은 문제를 효율적으로 해결하기 위해 배열에서 두 개의 포인터를 사용하는 것입니다.

템플릿



3가지 일반적인 두 포인터 기술은 다음과 같습니다.
  • 슬라이딩 윈도우
  • 두 끝의 포인터
  • 빠르고 느린 포인터

  • 슬라이딩 윈도우



    슬라이딩 윈도우는 하위 배열에서 무언가를 검색하는 데 사용할 수 있습니다.

    def get_counter():
        pass
    
    def condition():
        pass
    
    def do_something_before():
        pass
    
    def do_something_after():
        pass
    
    def sliding_window(arr):
        counter = get_counter()
        # outer loop to move end index
        while end < len(arr):
            end += 1
            # start index only increase when condition
            while condition():
                do_something_before()
                start += 1
        do_something_after()
    


    두 끝에서 포인터



    배열에서 조건을 만족하는 두 요소를 찾는 것으로 문제를 줄일 수 있을 때 두 끝의 포인터를 사용할 수 있습니다.

    def condition_left():
        pass
    
    def condition_right():
        pass
    
    def do_something():
        pass
    
    def pointers_from_two_ends(arr):
        left, right = 0, len(arr)-1
        while left < right:
            if condition_left():
                left += 1
            if condition_right():
                right -= 1
            do_something()
    
    


    빠르고 느린 포인터



    빠르고 느린 포인터를 사용하여 다음을 수행할 수 있습니다.
  • 주기 감지
  • 중복 제거
  • 중간 노드 찾기

  • def condition_slow():
        pass
    
    def do_something():
        pass
    
    def fast_slow_pointers(arr):
        slow = 0
        for fast in range(len(arr)):
            # only move slow pointer when condition
            if condition_slow():
                slow += 1
            do_something()
    

    좋은 웹페이지 즐겨찾기