간격과 숫자 '값'을 포함하는 2D 배열 arr[][]이 제공됩니다. 목표는 값이 사이에 있는 arr에 존재하는 간격의 수를 찾는 것입니다. 예를 들어 간격이 [ [1,5], [3,7] ]이고 값이 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에 있는 범위의 모든 수에 대해 주파수 배열 rr_2[]를 생성할 것입니다. 따라서 각 범위의 arr[i][0] 및 arr[i][1]에 대해 주파수는 arr_2[ arr[i][0 또는 1] ]로 증가합니다. 결국 우리는 i-1보다 작은 숫자도 i보다 작아서 주파수가 추가될 것이기 때문에 주파수 배열을 arr_2[i]=arr_2[i]+arr_2[i−1]로 업데이트할 것입니다. 이런 식으로 값이 있는 모든 범위로 rr_2[value]를 얻습니다.
-
범위를 포함하는 정수 배열 arr[][]를 가져옵니다.
-
정수 값을 입력으로 사용합니다.
-
Interval_values(int arr[][2], int size, int value) 함수는 arr과 value를 취하여 주어진 값이 있는 간격의 수를 반환합니다.
-
주파수 배열 arr_2[]를 가져옵니다.
-
INT_MAX 및 INT_MIN으로 최저 및 최고를 취하십시오.
-
i=0에서 i
까지 for 루프를 사용하여 arr[][] 트래버스 -
범위의 왼쪽으로 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