[알고리즘] 다중 포인터 패턴 설명! (에피소드 1)
3258 단어 pointersalgorithms
그러나 그것이 제기하는 우려는 반복이 과도하게 사용될 때입니다. 루프 내부의 루프는 프로그램이 대규모 데이터에서 실행되는 방식에 영향을 미칩니다. (N 제곱 시간 복잡도)
For Loop
For Loop
따라서 정렬된 목록을 통해 검색하는 더 좋은 방법이 있어야 합니다.
배열 { 2, 3, 7, 9, 17, 1, 5 }의 예를 살펴보겠습니다. 여기에서 10을 제공하는 배열 요소의 두 합을 찾아야 합니다!
꽤 쉬운데?
배열의 구성 요소를 살펴보면
7 + 3 및 9 + 1은 모두 10을 제공합니다.
무엇보다도 먼저 0부터 시작하는 인덱스로 시작하여 전체 배열 목록을 검색합니다. 간단히 말해서 배열 목록의 모든 단일 요소와 0부터 시작하는 요소의 합입니다.
젠장! 우리는 그것을 보지 못했다!
.......다음 인덱스로 이동........
배열의 모든 요소를 첫 번째 인덱스와 거의 합한 것인데 우리는 그것을 보지 못했습니다. 인덱스를 1씩 이동하고 배열을 다시 스캔하기로 결정했습니다.
예!! 우리는 그것을 찾았습니다.
그러나 배열에 100만 개에 가까운 요소가 있다고 가정하면 배열 목록을 스캔하고 시작/상관 인덱스를 1씩 이동한 다음 100만 개를 다시 스캔해야 합니다. ~반복.~ (그건 시간과 자원의 열악한 성능)
class Program
{
static void Main(string[] args)
{
int[] result = SumArray(new int[] { 2, 3, 7, 9, 17, 1, 5 }, 10);
Console.WriteLine($"{result[0]}, {result[1]}");
Console.ReadLine();
}
private static int[] SumArray(int[] array, int luckySum)
{
for (int i = 0; i < array.Length; i++) //Use this to get the index of each element
{
for (int j = i+1; j < array.Length; j++) //use this loop to scan through the array
{
int firstVal = array[i];
int secondVal = array[j];
int sum = firstVal + secondVal;
if (sum == luckySum)
return new int [] { array[i], array[j]};
}
}
return new int[] { };
}
}
따라서 효율적이지 않으므로 해당 접근 방식을 폐기해야 합니다. (정렬되지 않은 목록으로 작업하지 않는 한)
그런 다음 다중/이중 포인터 접근 방식을 위한 공간을 제공합니다.
다음화에서 설명....
Reference
이 문제에 관하여([알고리즘] 다중 포인터 패턴 설명! (에피소드 1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aloksdiptim/algorithm-multiple-pointers-pattern-explained-episode-1-44bf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)