C++程序中检查数字是否位于N个L-R范围内的查询
在这个问题中,我们得到一个二维矩阵`arr[][2]`,它包含n个范围(L, R),L-R。以及Q个查询,每个查询包含一个整数值。我们的任务是创建一个程序来解决这些查询,以检查数字是否位于N个L-R范围内。
问题描述 − 在这里,我们解决每个查询,使得查询的每个元素都位于任何一个范围内。
范围之间不能重叠。
让我们来看一个例子来理解这个问题:
输入
arr[n][2] = { {5, 7}, {1, 3}, {9, 12} } n = 3 Q = 2, query = {10, 4}输出
Yes No
解释
解决这个问题的一个简单方法是解决每个查询,并找到元素所在的范围。如果它位于任何一个范围内,则返回true,否则返回false。根据范围值对矩阵进行排序可以有所帮助。
算法
步骤1 − 按行对矩阵进行排序,即根据范围排序。
步骤2 − 循环 i -> 0 到 Q,针对所有查询。
步骤2.1 − 如果元素位于任何一个范围内,即 (arr[i][0] <= q && arr[i][1] >= q) -> 返回true。
程序说明了我们解决方案的工作原理:
示例
#include <iostream>
using namespace std;
bool isPresent(int arr[][2], int n, int element){
for(int i = 0; i < n; i++){
if(arr[i][0] <= element && arr[i][1] >= element )
return true;
}
return false;
}
void solveQueries_Range(int arr[][2], int n, int Q, int query[]){
int temp[2];
for(int j = 0; j < (n - 1); j++){
for(int k = (j + 1); k < n; k++)
if(arr[j][0] > arr[k][0]){
temp[0] = arr[k][0]; temp[1] = arr[k][1];
arr[k][0] = arr[j][0]; arr[k][1] = arr[j][1];
arr[j][0] = temp[0]; arr[j][1] = temp[1];
}
}
for(int i = 0; i < Q; i++ ){
if(isPresent(arr, n, query[i]))
cout<<"For Query "<<(i + 1)<<": The number "<<query[i]<<" lies in the range\n";
else
cout<<"For Query "<<(i + 1)<<": The number "<<query[i]<<" does not lie in the range\n";
}
}
int main(){
int arr[][2] = { {5, 7}, {1, 3}, {9, 12} };
int n = 3;
int Q = 2;
int query[] = { 10, 4 };
solveQueries_Range(arr, n, Q, query);
return 0;
}输出
For Query 1: The number 10 lies in the range For Query 2: The number 4 does not lie in the range
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP