สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n องค์ประกอบบางอย่างของอาร์เรย์ A[i] นี้เรียกว่าค่าต่ำสุดในพื้นที่ก็ต่อเมื่อมีค่าน้อยกว่าเพื่อนบ้านทั้งสองอย่างเคร่งครัด นอกจากนี้หากมากกว่าเพื่อนบ้านอย่างเคร่งครัด จะเป็นค่าสูงสุดในพื้นที่ สำหรับ A[0] และ A[n-1] เนื่องจากมีเพื่อนบ้านเพียงคนเดียวจึงไม่ใช่ maxima หรือ minima เราต้องหาจำนวน local extrema ในอาร์เรย์ที่กำหนด
ดังนั้น หากอินพุตเป็นเหมือน A =[1, 5, 2, 5] เอาต์พุตจะเป็น 2 เนื่องจาก 5 ที่ A[1] เป็นค่าสูงสุดในเครื่อง และ 2 ที่ A[2] คือค่าต่ำสุดในเครื่อง
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
sum :=0n :=size of Afor initialize i :=1, when iA[i + 1] และ A[i]> A[i - 1]) จากนั้น:(เพิ่มผลรวมโดย 1) ผลรวมคืนก่อน> ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#includeใช้เนมสเปซ std;int แก้ (เวกเตอร์ A){ ผลรวม int =0; int n =A.size(); สำหรับ (int i =1; i A[i + 1] &&A[i]> A[i - 1])) ผลรวม++; ผลตอบแทนรวม;}int main(){ vector A ={ 1, 5, 2, 5 }; ศาล <<แก้ (A) < อินพุต
{ 1, 5, 2, 5 }ผลลัพธ์
2