ได้รับลำดับจำนวนเต็มเป็นอาร์เรย์ เราต้องตัดสินใจว่าสามารถได้ลำดับเพิ่มขึ้นอย่างเคร่งครัดโดยการลบองค์ประกอบไม่เกินหนึ่งตัวจากอาร์เรย์ได้หรือไม่
ตัวอย่าง −
สำหรับ sequence = [1, 3, 2, 1] ผลลัพธ์ควรเป็น function(sequence) = false ไม่มีองค์ประกอบไหนในอาร์เรย์นี้ที่ลบออกได้เพื่อให้ได้ลำดับเพิ่มขึ้นอย่างเคร่งครัด
สำหรับ sequence = [1, 3, 2] ผลลัพธ์ควรเป็น function(sequence) = true คุณสามารถลบ 3 ออกจากอาร์เรย์เพื่อได้ลำดับเพิ่มขึ้นอย่างเคร่งครัด [1, 2] หรือลบ 2 เพื่อได้ [1, 3]
ลำดับเพิ่มขึ้นอย่างเคร่งครัด
เป็นคำทางคณิตศาสตร์ที่แทนการจัดเรียงตัวเลขที่ทุกตัวเลขถัดไปมากกว่าตัวเลขก่อนหน้า นอกจากนี้ยังมีลำดับเพิ่มขึ้น (increasing sequence) ที่ตัวต่อไปมากกว่าหรือเท่ากับตัวก่อนหน้า
ตรรกะเดียวกันใช้ได้กับลำดับลดลงและลดลงอย่างเคร่งครัด
วิธีการ
เราจะวนลูปผ่านอาร์เรย์ตรวจสอบว่าองค์ประกอบถัดไปมากกว่าองค์ประกอบก่อนหน้าหรือไม่ ถ้ามากกว่า ก็โอเค แต่ถ้าไม่มากกว่า (จำได้ว่าต้องมากกว่าเคร่งครัด ไม่ใช่มากกว่าหรือเท่ากัน เพราะเราต้องการลำดับเพิ่มขึ้นอย่างเคร่งครัด) เราจะนับ unwantedElements และเพิ่ม 1 ทุกครั้งที่เกิดขึ้น
ถ้าระหว่างการวนลูป จำนวนเกิน 1 เราคืนค่า false ทันที มิฉะนั้นถ้าเราผ่านลูปหมดด้วย unwantedElements <= 1 เราคืนค่า true
ดังนั้น มาเขียนโค้ดสำหรับฟังก์ชันนี้
ตัวอย่าง
const isStrictlyIncreasing = (arr) => { let unwantedElements = 0; for(let i = 0; i < arr.length - 1; i++){ if(arr[i] >= arr[i+1]){ unwantedElements++; if(unwantedElements > 1){ return false; }; }; }; return true; }; console.log(isStrictlyIncreasing([1, 3, 2, 1])); console.log(isStrictlyIncreasing([1, 3, 2]));ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้
false true