เพิ่มลำดับ
ลำดับของตัวเลขซึ่งแต่ละองค์ประกอบที่ตามมามีค่ามากกว่าหรือเท่ากับองค์ประกอบก่อนหน้านั้นเป็นลำดับที่เพิ่มขึ้น
ตัวอย่างเช่น
4, 6, 8, 9, 11, 14 is increasing sequence 3, 3, 3, 3, 3, 3, 3 is also an increasing sequence
ปัญหา:
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ 2 มิติของตัวเลข arr เป็นอาร์กิวเมนต์เท่านั้น ฟังก์ชันของเราควรค้นหาและส่งกลับความยาวของเส้นทางที่ยาวที่สุดในอาร์เรย์ที่มีเฉพาะตัวเลขที่เพิ่มขึ้นเท่านั้น
ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −
const arr = [ [4, 5, 6], [4, 3, 7], [3, 3, 2] ];
จากนั้นผลลัพธ์ควรเป็น −
const output = 4;
คำอธิบายผลลัพธ์:
เพราะลำดับการเพิ่มขึ้นที่ยาวที่สุดคือ 4, 5, 6, 7
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr = [ [4, 5, 6], [4, 3, 7], [3, 3, 2] ]; const longestIncreasingPath = (arr = []) => { let longest = 0; let dp = Array(arr.length).fill(null).map(() => Array(arr[0].length).fill(1)); const backtracking = (row, col) => { if (dp[row][col]!=1) return dp[row][col]; let dRow = [1,0,-1,0]; let dCol = [0,1,0,-1]; for (let i = 0;i<dRow.length;i++) { let nR = row + dRow[i], nC = col+dCol[i]; if (nR >= 0 && nR < arr.length && nC >= 0 && nC < arr[0].length && arr[nR][nC] > arr[row][col]) { dp[row][col] = Math.max(dp[row][col], 1 + backtracking(nR, nC)) }; }; return dp[row][col]; } for (let i=0;i<arr.length;i++) { for (let j=0;j<arr[0].length;j++) { longest = Math.max(longest, backtracking(i, j)); }; }; return longest; }; console.log(longestIncreasingPath(arr));
คำอธิบายโค้ด:
ไอเดีย
-
ในที่นี้เราได้ใช้การค้นหาย้อนหลังเชิงลึกก่อน
-
ฟังก์ชันการเรียกซ้ำจะส่งกลับเส้นทางที่เพิ่มขึ้นที่ยาวที่สุดสำหรับแถวและคอลัมน์ที่กำหนด
-
หากเรามีบันทึกของเส้นทางการเพิ่มขึ้นที่ยาวที่สุดสำหรับตำแหน่งแล้ว เราก็สามารถคืนค่านั้นได้
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
4