Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Giải thuật đảo ngược mảng giữ nguyên vị trí ký tự đặc biệt JavaScript

Yêu cầu: đảo ngược mảng nhưng không thay đổi chỉ số của ký tự đặc biệt (ví dụ '#'). Mảng [18,-4,'#',0,8,'#',5] => [5, 8, "#", 0, -4, "#", 18]. Số đảo ngược, '#' giữ nguyên chỉ số.

Dùng hai con trỏ (two-pointer): start và end trỏ hai đầu. Nếu gặp ký tự đặc biệt thì bỏ qua (tăng/giảm con trỏ), nếu cả hai không phải ký tự đặc biệt thì hoán đổi giá trị.

Ví dụ

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);

Kết quả

Đầu ra trong console sẽ là:

[ 5, 8, '#', 0, -4, '#', 18 ]