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

ความยาวสูงสุดของภูเขาในอาร์เรย์ด้วย JavaScript

ลำดับย่อยแบบภูเขา (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