Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

배열 역 알고리즘 문제 JavaScript에 대한 솔루션

<시간/>

아래 예제와 같이 배열에 있는 특수 문자의 인덱스를 변경하지 않고 배열을 뒤집는 함수를 작성해야 한다는 요구 사항이 있습니다. -

'#'가 해당 특수 문자이면 다음 배열,

[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
]