Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm số khoảng thời gian mà một giá trị nhất định nằm trong C ++

Cho một mảng 2D arr [] [] chứa các khoảng và một số "giá trị". Mục đích là để tìm số khoảng có trong arr giữa giá trị đó nằm. Ví dụ các khoảng là [[1,5], [3,7]] và value =4 thì nó nằm trong cả hai khoảng này và số lượng sẽ là 2.

Ví dụ

Đầu vào

arr[4][2] = { { 1, 20 }, { 12, 25 }, { 32, 40 }, { 15, 18 } } value=16

Đầu ra

Count of number of intervals in which a given value lies are: 3

Giải thích

The value 16 lies between 1−20, 12−25 and 15−18

Đầu vào

arr[4][2] = {{ 1, 20 }, { 20,30 }, { 30, 40 }, { 40, 50 }} value=60

Đầu ra

Count of number of intervals in which a given value lies are: 0

Giải thích

The value 60 is larger than all maximum ranges of intervals present in
arr[][].

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau -

Trong cách tiếp cận này, chúng tôi sẽ tạo một mảng tần số arr_2 [] cho tất cả các số của các phạm vi có trong arr. Vì vậy, đối với arr [i] [0] và arr [i] [1] của mỗi dải, tần số sẽ được tăng lên trong arr_2 [arr [i] [0 hoặc 1]]. Cuối cùng, chúng tôi sẽ cập nhật mảng tần số với arr_2 [i] =arr_2 [i] + arr_2 [i-1] vì các số nhỏ hơn i-1 cũng sẽ nhỏ hơn i nên tần số sẽ được thêm vào. Bằng cách này, chúng tôi sẽ nhận được arr_2 [giá trị] là tất cả các phạm vi có giá trị nằm trong đó.

  • Lấy một mảng số nguyên arr [] [] chứa các dải ô.

  • Lấy một giá trị số nguyên làm đầu vào.

  • Hàm khoảng_giá_trị (int arr [] [2], int size, int value) nhận arr và giá trị và trả về số lượng khoảng có một giá trị nhất định.

  • Lấy mảng tần số arr_2 [].

  • Lấy thấp và cao nhất là INT_MAX và INT_MIN.

  • Traverse arr [] [] sử dụng vòng lặp for từ i =0 đến i

  • Hãy tạm thời ở bên trái của phạm vi và tăng tần số của nó trong arr_2 [temp]

  • Lấy temp_2 ở bên phải của dải ô và tăng tần số của nó trong arr_2 [temp_2 + 1]

  • Nếu temp cao nhất hãy đặt cao nhất là temp_2.

  • Duyệt mảng tần số và cập nhật nó arr_2 [i] =arr_2 [i] + arr_2 [i + 1].

  • Cuối cùng, trả về arr_2 [value].

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count the number of intervals in which a given value lies are: 18830628