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

Sắp xếp mảng chính xác ba phần tử lặp lại duy nhất trong JavaScript

Giả sử chúng ta có một mảng Số chứa bất kỳ tần số nào của chính xác ba phần tử -1, 0 và 1 như thế này -

const arr = [1, 1, 0, -1, 1, 0, -1, 1, 0, 0, 1];

Chúng tôi được yêu cầu viết một hàm JavaScript có trong một mảng như vậy. Hàm sẽ chỉ cần sắp xếp mảng đặc biệt này tại chỗ, tức là không sử dụng bất kỳ mảng bổ sung nào để lưu trữ các giá trị.

Điều kiện duy nhất là hàm của chúng ta phải là một hàm thời gian tuyến tính (chỉ sử dụng một lần lặp).

Ví dụ

Sau đây là mã -

const arr = [1, 1, 0, -1, 1, 0, -1, 1, 0, 0, 1];
const sortSpecialArray = (arr = []) => {
   const swap = (a, b) => {
      let middle = arr[a]
      arr[a] = arr[b]
      arr[b] = middle
   };
   let left = 0;
   let middle = 0;
   let right = arr.length-1;
   while(middle <= right){
      if(arr[middle] === -1){
         swap(left++, middle++);
      }else if(arr[middle] === 0){
         middle++;
      }else if(arr[middle] === 1){
         swap(right--, middle);
      }
   };
};
sortSpecialArray(arr);
console.log(arr);

Đầu ra

Sau đây là đầu ra của bảng điều khiển -

[
   -1, -1, 0, 0, 0,
   0, 1, 1, 1, 1,
   1
]