ในบทความนี้ เราต้องหาจำนวนเซ็กเมนต์หรืออาร์เรย์ย่อยในลำดับที่กำหนดโดยที่องค์ประกอบมากกว่าจำนวน X ที่กำหนด
เราสามารถนับส่วนที่ทับซ้อนกันได้เพียงครั้งเดียว และไม่ควรนับองค์ประกอบหรือส่วนที่ต่อเนื่องกันสองรายการแยกกัน นี่คือตัวอย่างพื้นฐานของปัญหาที่กำหนด -
Input : arr[ ] = { 9, 6, 7, 11, 5, 7, 8, 10, 3}, X = 7 Output : 3 Explanation : { 9 }, { 11 } and { 8, 10 } are the segments greater than 7 Input : arr[ ] = { 9, 6, 12, 2, 11, 14, 8, 14 }, X = 8 Output : 4 Explanation : { 9 }, { 12 }, { 11, 14 } and { 14 } are the segments greater than 8
แนวทางในการหาแนวทางแก้ไข
แนวทางที่ไร้เดียงสา
ในปัญหานี้ เรากำลังเริ่มต้นตัวแปร state ด้วย 0 และเริ่มประมวลผลอาร์เรย์ที่กำหนดและเปลี่ยนสถานะเป็น 1 เมื่อพบองค์ประกอบที่มากกว่า X และดำเนินการประมวลผลองค์ประกอบต่อไปและเปลี่ยนสถานะกลับเป็น 0 เมื่อพบตัวเลขน้อยกว่าหรือเท่ากับ X และนับเพิ่มขึ้นด้วย 1 ทุกครั้งที่สถานะไปที่ 1 และกลับไปเป็น 0
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int main (){ int a[] = { 9, 6, 12, 2, 11, 14, 8, 14 }; int n = sizeof (a) / sizeof (a[0]); int X = 8; int state = 0; int count = 0; // traverse the array for (int i = 0; i < n; i++){ // checking whether element is greater than X if (a[i] > X){ state = 1; } else{ // if flag is true if (state) count += 1; state = 0; } } // checking for the last segment if (state) count += 1; cout << "Number of segments where all elements are greater than X: " << count; return 0; }
ผลลัพธ์
Number of segments where all elements are greater than X: 4
คำอธิบายของโปรแกรมข้างต้น
ในโปรแกรมด้านบนเราใช้ state เป็นตัวสลับ และตั้งค่าเป็น 1 เมื่อพบตัวเลขที่มากกว่า X และตั้งค่าเป็น 0 เมื่อพบตัวเลขที่น้อยกว่าหรือเท่ากับ X และสำหรับสถานะทุกครั้ง ไปที่ 1 และกลับมาเป็น 0 เราเพิ่มจำนวนขึ้น 1 ในที่สุด พิมพ์ผลลัพธ์ที่เก็บไว้ในการนับ
บทสรุป
ในบทความนี้ เราแก้ปัญหาในการค้นหาจำนวนเซ็กเมนต์ที่องค์ประกอบทั้งหมดมากกว่า X โดยใช้วิธีการตั้งค่าสถานะเป็น 1 และ 0 ทุกครั้งที่พบเซ็กเมนต์ เราสามารถเขียนโปรแกรมนี้ในภาษาโปรแกรมอื่น ๆ เช่น C, Java, Python เป็นต้น