Dãy tăng chặt
Một dãy là tăng chặt nếu và chỉ nếu arr[0] < arr[1] < arr[2] < ... < arr[arr.length - 1].
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 làm đối số thứ nhất và thứ hai. Chúng ta có thể hoán đổi bất kỳ số lượng phần tử nào từ arr1 sang arr2 ở cùng chỉ số (tức hoán đổi arr1[i] với arr2[i]). Hàm phải trả về số lần hoán đổi tối thiểu để cả hai dãy đều tăng chặt.
Ví dụ, nếu đầu vào là:
Đầu vào
const arr1 = [1, 3, 5, 4]; const arr2 = [1, 2, 3, 7];
Đầu ra
const output = 1;
Giải thích
Vì nếu hoán đổi arr1[3] với arr2[3], cả hai mảng sẽ trở thành tăng chặt.
Ví dụ
Dưới đây là mã thực hiện:
const arr1 = [1, 3, 5, 4];
const arr2 = [1, 2, 3, 7];
const findSwaps = (arr1 = [], arr2 = []) => {
let map = {
true: 1,
false: 0,
};
for (let i = 1; i < arr1.length; i++) {
const current = {
true: Infinity,
false: Infinity,
};
if (arr1[i] > arr2[i - 1] && arr2[i] > arr1[i - 1]) {
current.true = Math.min(current.true, map.false + 1);
current.false = Math.min(current.false, map.true);
}
if (arr2[i] > arr2[i - 1] && arr1[i] > arr1[i - 1]) {
current.true = Math.min(current.true, map.true + 1);
current.false = Math.min(current.false, map.false);
}
map = current;
}
return Math.min(map.false, map.true);
};
console.log(findSwaps(arr1, arr2));
Kết quả
1