ลำดับย่อยแบบภูเขา (Mountain Subsequence)
เราเรียกอาร์เรย์ย่อยต่อเนื่อง (contiguous subarray) sub (ของ arr) ว่าเป็นภูเขา หากคุณสมบัติต่อไปนี้เป็นจริง
sub.length >= 3- มีบาง
0 < i < sub.length - 1ที่ทำให้sub[0] < sub[1] < ... sub[i-1] < sub[i] > sub[i+1] > ... > sub[sub.length - 1]
ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลข arr เป็นอาร์กิวเมนต์เดียว
ฟังก์ชันควรคืนค่าความยาวของลำดับย่อยแบบภูเขาที่ใหญ่ที่สุดที่มีอยู่ในอาร์เรย์ arr หากมี 0 ในกรณีอื่น
ตัวอย่างเช่น หากอินพุตคือ
อินพุต
const arr = [3, 2, 5, 8, 4, 3, 6];
เอาต์พุต
const output = 5;
คำอธิบายเอาต์พุต
เพราะอาร์เรย์ย่อยที่ต้องการคือ
[2, 5, 8, 4, 3]
ตัวอย่างโค้ด
const arr = [3, 2, 5, 8, 4, 3, 6];
const mountainLength = (arr = []) => {
let max = 0;
for (let left = 0; left < arr.length; left++) {
let right = left;
while (arr[right] < arr[right + 1]) {
right++;
}
const top = right;
while (right > left && arr[right] > arr[right + 1]) {
right++;
}
if (right > top && top > left) {
max = Math.max(max, right - left + 1);
left = right;
left--;
}
}
return max;
};
console.log(mountainLength(arr));
ผลลัพธ์
5