ลำดับเพิ่มขึ้นอย่างเด็ดขาด (Strictly Increasing Sequence)
ลำดับจะ เพิ่มขึ้นอย่างเด็ดขาด ก็ต่อเมื่อ arr[0] < arr[1] < arr[2] < ... < arr[arr.length - 1]
ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลขสองอาร์เรย์ arr1 และ arr2 เป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์ที่สองตามลำดับ
เราสามารถสลับองค์ประกอบจำนวนหนึ่งจาก arr1 ไป arr2 ที่อยู่บนดัชนีเดียวกันได้ หมายถึงเราสามารถสลับ arr1[i] กับ arr2[i] ฟังก์ชันควรคืนค่าจำนวนการสลับน้อยที่สุดเพื่อทำให้ทั้งสองลำดับเพิ่มขึ้นอย่างเด็ดขาด
ตัวอย่างเช่น หากอินพุตคือ
อินพุต
const arr1 = [1, 3, 5, 4];
const arr2 = [1, 2, 3, 7];
เอาต์พุต
const output = 1;
คำอธิบายเอาต์พุต
เพราะหากเราสลับ arr1[3] กับ arr2[3] ทั้งสองอาร์เรย์จะกลายเป็นเพิ่มขึ้นอย่างเด็ดขาด
ตัวอย่างโค้ด
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));
ผลลัพธ์
1