Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การทำให้สองลำดับเพิ่มขึ้นอย่างเด็ดขาดใน JavaScript

ลำดับเพิ่มขึ้นอย่างเด็ดขาด (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