간격과 숫자 '값'을 포함하는 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