กำหนดอาร์เรย์ 2 มิติ arr[][] ที่มีช่วงเวลาและค่า 'ค่า' ตัวเลข เป้าหมายคือการหาจำนวนช่วงเวลาที่มีอยู่ใน arr ระหว่างที่ค่าอยู่ ตัวอย่างเช่น ช่วงคือ [ [1,5], [3,7] ] และ value=4 จากนั้นจะอยู่ในช่วงเวลาทั้งสองนี้และนับเป็น 2
ตัวอย่าง
อินพุต
arr[4][2] = { { 1, 20 }, { 12, 25 }, { 32, 40 }, { 15, 18 } } value=16
ผลลัพธ์
Count of number of intervals in which a given value lies are: 3
คำอธิบาย
The value 16 lies between 1−20, 12−25 and 15−18
อินพุต
arr[4][2] = {{ 1, 20 }, { 20,30 }, { 30, 40 }, { 40, 50 }} value=60
ผลลัพธ์
Count of number of intervals in which a given value lies are: 0
คำอธิบาย
The value 60 is larger than all maximum ranges of intervals present in arr[][].
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้ −
ในแนวทางนี้ เราจะสร้างอาร์เรย์ความถี่ arr_2[] สำหรับจำนวนทั้งหมดของช่วงที่อยู่ใน arr ดังนั้นสำหรับแต่ละช่วง arr[i][0] และ arr[i][1] ความถี่จะเพิ่มขึ้นใน arr_2[ arr[i][0 หรือ 1] ] ในตอนท้าย เราจะอัปเดตอาร์เรย์ความถี่ด้วย arr_2[i]=arr_2[i]+arr_2[i−1] เนื่องจากตัวเลขที่น้อยกว่า i-1 จะน้อยกว่า i ดังนั้นความถี่จะถูกเพิ่มเข้าไป ด้วยวิธีนี้เราจะได้ arr_2[value] ตามช่วงทั้งหมดที่ค่าอยู่
-
รับอาร์เรย์จำนวนเต็ม arr[][] ที่มีช่วง
-
รับค่าจำนวนเต็มเป็นอินพุต
-
ฟังก์ชัน intervals_values(int arr[][2], int size, int value) รับค่า arr และค่า และส่งคืนค่าจำนวนช่วงที่ค่าที่กำหนดอยู่
-
ใช้อาร์เรย์ความถี่ arr_2[].
-
ลดระดับต่ำสุดและสูงสุดเป็น INT_MAX และ INT_MIN
-
Traverse arr[][] ใช้ for loop จาก i=0 ถึง i
-
ใช้ temp เป็นด้านซ้ายของช่วงและเพิ่มความถี่ใน arr_2[temp]
-
ใช้ temp_2 เป็นช่วงที่ถูกต้องและเพิ่มความถี่ใน arr_2[temp_2+1]
-
ถ้า temp
สูงสุด ตั้งค่าสูงสุดเป็น temp_2. -
ข้ามอาร์เรย์ความถี่และอัปเดต arr_2[i]=arr_2[i]+arr_2[i+1].
-
ในตอนท้ายส่งคืน arr_2[value] เป็นผลลัพธ์
ตัวอย่าง
#include<bits/stdc++.h> using namespace std; #define max 1000 int intervals_values(int arr[][2], int size, int value){ int arr_2[max]; int low = INT_MAX; int highest = INT_MIN; for(int i = 0; i < size; i++){ int temp = arr[i][0]; arr_2[temp] = arr_2[temp] + 1; int temp_2 = arr[i][1]; arr_2[temp_2 + 1] = arr_2[temp_2 + 1] − 1; if(temp < low){ low = temp; } if(temp_2 > highest){ highest = temp_2; } } for (int i = low; i <= highest; i++){ arr_2[i] = arr_2[i] + arr_2[i − 1]; } return arr_2[value]; } int main(){ int arr[4][2] = { { 3, 20 }, { 2, 13 }, { 25, 30 }, { 15, 40 } }; int size = sizeof(arr) / sizeof(arr[0]); int value = 28; cout<<"Count the number of intervals in which a given value lies are: "<<intervals_values(arr, size, value); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count the number of intervals in which a given value lies are: 18830628