아래 예제와 같이 배열에 있는 특수 문자의 인덱스를 변경하지 않고 배열을 뒤집는 함수를 작성해야 한다는 요구 사항이 있습니다. -
'#'가 해당 특수 문자이면 다음 배열,
[18,-4,'#',0,8,'#',5]
반환해야 합니다 -
[5, 8, "#", 0, -4, "#", 18],
여기에서 인덱스를 유지한 '#'을 제외하고 숫자가 반전됩니다.
이를 위한 코드를 작성해 보겠습니다.
여기서는 2 포인터 접근 방식을 사용합니다. 시작과 끝은 각각 배열의 맨 왼쪽과 맨 오른쪽을 가리킵니다.
인덱스에서 특수 문자를 찾으면 해당 인덱스를 건너뛰고 반복을 계속하고 특수 문자가 없는 인덱스 쌍을 찾으면 값을 바꾸고 시작 포인터가 올바른 포인터보다 작은 동안 계속합니다. .
예시
const arr = [18,-4,'#',0,8,'#',5]; const reverseArray = (arr, special) => { let start = 0, end = arr.length - 1, temp; while(start < end){ if(arr[start] === special){ start++; continue; }; if(arr[end] === special){ end--; continue; }; temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; }; }; reverseArray(arr, '#'); console.log(arr);
출력
콘솔의 출력은 -
[ 5, 8, '#', 0, -4, '#', 18 ]