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]