Computer >> Máy Tính >  >> Lập trình >> Javascript

Giải pháp cho vấn đề thuật toán đảo ngược mảng JavaScript

Chúng tôi có một yêu cầu rằng chúng tôi phải viết một hàm để đảo ngược một mảng nhưng không thay đổi chỉ mục của một ký tự đặc biệt hiển thị trong một mảng, như ví dụ dưới đây -

Nếu ‘#’ là ký tự đặc biệt thì mảng sau,

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

nên quay lại -

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

Ở đây, các số được đảo ngược, ngoại trừ '#' vẫn giữ chỉ mục của nó.

Hãy viết mã cho việc này.

Chúng tôi sẽ sử dụng phương pháp tiếp cận hai con trỏ ở đây, bắt đầu và kết thúc trỏ tới cực trái và phần cuối bên phải của mảng tương ứng.

Nếu tại bất kỳ chỉ mục nào chúng tôi tìm thấy ký tự đặc biệt, chúng tôi bỏ qua chỉ mục đó và tiếp tục lặp lại và khi chúng tôi tìm thấy một cặp chỉ mục không có ký tự đặc biệt, chúng tôi hoán đổi giá trị của chúng và tiếp tục thực hiện việc này trong khi con trỏ bắt đầu nhỏ hơn con trỏ bên phải .

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

Đầu ra

Đầu ra trong bảng điều khiển sẽ là -

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