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

Tối đa hóa mảng đầu tiên so với mảng thứ hai trong JavaScript

Vấn đề

Chúng ta cần viết một hàm JavaScript nhận vào hai mảng số arr1 và arr2 cùng độ dài. Hàm phải xáo trộn các phần tử của mảng đầu tiên arr1 sao cho số lượng phần tử lớn hơn phần tử tương ứng của mảng arr2 là tối đa. Hàm trả về mảng đã xáo trộn.

Ví dụ, nếu đầu vào là:

Đầu vào

const arr1 = [3, 5, 12, 19];
const arr2 = [2, 9, 3, 12];

Đầu ra

const output = [3, 12, 5, 19];

Giải thích

Trước khi xáo trộn, arr1 có 3 phần tử lớn hơn arr2, nhưng sau khi xáo trộn, cả 4 phần tử đều lớn hơn.

Ví dụ

Dưới đây là mã thực hiện:

const arr1 = [3, 5, 12, 19];
const arr2 = [2, 9, 3, 12];
const maximiseArray = (arr1 = [], arr2 = []) => {
  arr1.sort((a, b) => b - a);
  const indexes = arr2.map((v, index) => index).sort((a, b) => arr2[b] - arr2[a]);
  const res = [];
  for (let i = 0; i < indexes.length; i++) {
    const index = indexes[i];
    res[index] = arr1[0] > arr2[index] ? arr1.shift() : arr1.pop();
  }
  return res;
};
console.log(maximiseArray(arr1, arr2));

Kết quả

[3, 12, 5, 19]