"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 두 포인터 및 슬라이딩 윈도우 패턴

두 포인터 및 슬라이딩 윈도우 패턴

2024-09-11에 게시됨
검색:803

Two Pointer and sliding window pattern

두 포인터 및 슬라이딩 창 패턴

패턴 1: 상수 창(창 = 4 또는 일부 정수 값과 유사)

예를 들어 (-ve 및 ve) 정수 배열이 주어지면 크기가 k인 연속 창에 대한 최대 합계를 찾습니다..

패턴 2:(가변 창 크기) 이 포함된 가장 큰 하위 배열/하위 문자열 예: sum

  • 구혼:
    • 무차별 대입: 가능한 모든 하위 배열을 생성하고 최대 길이 하위 배열을 선택합니다. 합계
  • 베팅/최적: 두 개의 포인터와 슬라이딩 윈도우를 사용하여 시간 복잡도를 O(n)으로 줄입니다.

패턴 3: 이 sum=k인 경우 하위 배열/하위 문자열이 없습니다.
이는 확장할 때(오른쪽), 축소할 때(왼쪽) 어려워지기 때문에 해결하기가 매우 어렵습니다.

이 문제는 패턴 2
를 사용하여 해결할 수 있습니다. sum =k.

인 부분 문자열 수를 찾는 것과 같은 문제를 해결하는 경우
  • 이것은 다음과 같이 분류될 수 있습니다.

    • sum
    • sum이 됩니다.

패턴 4: 가장 짧은/최소 창 찾기

패턴 2에 대한 다양한 접근 방식:
예: 합계가 있는 가장 큰 하위 배열

public class Sample{
    public static void main(String args[]){
        n = 10;
        int arr[] = new int[n];

        //Brute force approach for finding the longest subarray with sum  k) break; /// optimization if the sum is greater than the k, what is the point in going forward? 
            }
        }

두 개의 포인터와 슬라이딩 창을 사용하는 더 나은 접근 방법

        //O(n n) in the worst case r will move from 0 to n and in the worst case left will move from 0 0 n as well so 2n
        int left = 0;
        int right =0;
        int sum = 0;
        int maxLen = 0;
        while(right k){
                sum = sum-arr[left];
                left  ;
            }
            if(sum 



최적의 접근 방식:
하위 배열을 찾으면 길이를 maxLen에 저장하지만 arr[right]를 추가하는 동안 합계가 k보다 커지면 현재 sum = sum-arr[left]를 수행하고 left를 수행하여 왼쪽으로 축소됩니다.
현재 최대 길이가 maxLen이라는 것을 알고 있습니다. 왼쪽 인덱스를 계속 축소하면 조건( maxLen인 다른 하위 배열을 찾으면 maxLen만 업데이트됩니다.

최적의 접근 방식은 하위 배열이 (

        int right =0;
        int sum = 0;
        int maxLen = 0;
        while(right k){// this will ensure that the left is incremented one by one (not till the sum




          

            
  

            
        
릴리스 선언문 이 글은 https://dev.to/prashantrmishra/two-pointer-and-sliding-window-pattern-4118?1 에서 복제되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3