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

ความยาวของอาร์เรย์ย่อยที่ไม่เรียงลำดับสั้นที่สุดใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลข arr เป็นอาร์กิวเมนต์เดียว

ฟังก์ชันต้องหาความยาวของ อาร์เรย์ย่อยต่อเนื่อง (continuous subarray) เพียงหนึ่งชุด ที่หากเราเรียงลำดับเฉพาะอาร์เรย์ย่อยนี้ตามลำดับน้อยไปมาก อาร์เรย์ทั้งหมดก็จะเรียงลำดับตามลำดับน้อยไปมากเช่นกัน

ตัวอย่างเช่น หากอินพุตคือ

const arr = [3, 7, 5, 9, 11, 10, 16];

ผลลัพธ์ควรเป็น

const output = 5;

คำอธิบายผลลัพธ์

เพราะหากเราเรียงลำดับ [7, 5, 9, 11, 10] อาร์เรย์ทั้งหมดจะเรียงลำดับสมบูรณ์

ตัวอย่างโค้ด

const arr = [3, 7, 5, 9, 11, 10, 16];
const shortestLength = (arr = []) => {
const sorted = [...arr].sort((a, b) => a - b);
let start = 0;
let end = sorted.length - 1;
while (sorted[start] === arr[start] && start < arr.length) {
start += 1;
}
while (sorted[end] === arr[end] && end >= 0) {
end -= 1;
}
return end >= start ? end - start + 1 : 0;
};
console.log(shortestLength(arr));

ผลลัพธ์

5