在这个问题上,我们得到了Q个查询。这些是三种类型,它们是-
查询1:将数字N添加到列表中。
查询2:将数字N删除到列表中。
查询3:返回列表中最小和最大元素的差。
我们的任务是创建一个程序来解决要添加,删除和返回C ++中的最大值和最小值之差的查询。
我们将获得要在列表上执行的Q个查询。有3种类型的查询可添加,删除和查找列表的最大和最小元素之间的差异。使用它,我们将首先构造元素列表,然后找到该列表的最大元素和最小元素之间的差异的查询3值。
让我们举个例子来了解这个问题,
输入:Q = 6
查询(1,4)
查询(1,9)
查询(1,6)
查询(2,4)
查询(1,3)
查询(3)
输出6
最后,列表将为{9,6,3}。
最高-> 9
最低-> 3
差异-> 6
解决问题的一种简单方法是直接解决每个查询。通过遵循这些步骤-
初始化数组。
对于查询类型1,将元素添加到数组中
对于查询类型2,从数组中删除一个元素
对于查询类型3,找到最大值和最小值之间的差,然后返回值。
#include <iostream> using namespace std; void solveQuerry(int type, int item){ int list[100]; static int index = 0; if(type == 1){ list[index] = item; index++; } else if(type == 2){ for(int i = 0; i <= index; i++) if(list[i] == item ){ list[i] = 0; break; } } else if(type == 3){ int max = -100, min = 100; for(int i = 0; i< index; i++){ if(list[i] == 0) i++; if(list[i] > max) max = list[i]; if(list[i] < min) min = list[i]; } cout<<"The difference between the maximum and minimum elements of the list is "<<(max - min); } } int main() { int Q = 6; int query[Q][2] = {{1, 5}, {1, 9}, {1, 6}, {2, 4}, {1, 3}, {3, 0}}; for(int i = 0; i< Q; i++){ solveQuerry(query[i][0], query[i][1]); } }
输出结果
The difference between the maximum and minimum elements of the list is 6
如果我们使用其他数据结构而不是简单数组,则搜索过程会更有效。在这里,如果我们使用自平衡二进制搜索树而不是数组。max元素将位于末尾(使用rbegin()
方法访问)。min元素将位于开头(使用begin()
方法访问)。
使用该集完成了C ++中自平衡二进制搜索树的实现。
#include <bits/stdc++.h> using namespace std; set<int> myList; void solveQuerry(int type, int num){ if(type == 1){ myList.insert(num); } else if(type == 2){ myList.erase(num); } else if(type == 3){ int max = *(myList.rbegin()); int min = *(myList.begin()); cout<<"The difference between the maximum and minimum elements of the list is "<<(max - min); } } int main() { int Q = 6; int query[Q][2] = {{1, 5}, {1, 9}, {1, 6}, {2, 4}, {1, 3}, {3, 0}}; for(int i = 0; i< Q; i++){ solveQuerry(query[i][0], query[i][1]); } }
输出结果
The difference between the maximum and minimum elements of the list is 6