ในปัญหานี้ เราได้รับคำถาม Q เหล่านี้มีสามประเภท ได้แก่ −
-
คำถามที่ 1:เพิ่มหมายเลข N ในรายการ
-
แบบสอบถาม 2:ลบหมายเลข N ออกจากรายการ
-
แบบสอบถาม 3:ส่งคืนค่าส่วนต่างขององค์ประกอบต่ำสุดและสูงสุดของรายการ
งานของเราคือการสร้างโปรแกรมเพื่อแก้ปัญหาการสืบค้นเพื่อเพิ่ม ลบ และส่งคืนส่วนต่างของค่าสูงสุดและต่ำสุดใน C++
คำอธิบายปัญหา
เราจะได้รับคำถามจำนวน Q ที่เราจะดำเนินการในรายการ คิวรีมี 3 ประเภทที่จะเพิ่ม ลบ และค้นหาความแตกต่างขององค์ประกอบสูงสุดและต่ำสุดของรายการ โดยเราจะสร้างรายการองค์ประกอบก่อน จากนั้นจึงค้นหาค่า Query 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
กระบวนการค้นหาจะมีประสิทธิภาพมากขึ้นหากเราใช้โครงสร้างข้อมูลอื่นที่ไม่ใช่อาร์เรย์ธรรมดา ในที่นี้ หากเราใช้แผนผังการค้นหาแบบไบนารีที่ปรับสมดุลในตัวเองแทนอาร์เรย์ องค์ประกอบสูงสุดจะอยู่ที่ส่วนท้าย (เข้าถึงได้โดยใช้วิธี rbegin()) และองค์ประกอบขั้นต่ำจะอยู่ที่จุดเริ่มต้น (เข้าถึงได้โดยใช้วิธี start())
การนำแผนผังการค้นหาไบนารีที่ปรับสมดุลในตัวเองมาใช้ใน 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