ในปัญหานี้ เราจะได้รับสองอาร์เรย์ arr[] และ del[] งานของเราคือ ค้นหาส่วนที่เล็กที่สุดหลังจากลบองค์ประกอบที่กำหนด .
เราจะลบค่าออกจากอาร์เรย์ arr[] ที่มีอยู่ใน del[] แล้วพิมพ์ค่าที่น้อยที่สุดหลังจากการลบ
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล
arr[] = {2, 5, 6, 9, 1} del[] = {1, 5, 9}
ผลผลิต
2
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาง่ายๆ คือการใช้การแฮช เราจะแทรกค่าทั้งหมดของอาร์เรย์ del[] ลงในตารางแฮช จากนั้นเราจะสำรวจอาร์เรย์ arr[] และตรวจสอบว่าค่าในตารางแฮชหรือไม่ ถ้าน้อยกว่า minVal ถ้าใช่ ให้พิมพ์ minVal
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <bits/stdc++.h> using namespace std; int findSmallestVal(int arr[], int m, int del[], int n){ unordered_map<int, int> delVals; for (int i = 0; i < n; ++i) { delVals[del[i]]++; } int minVal = INT_MAX; for (int i = 0; i < m; ++i) { if (delVals.find(arr[i]) != delVals.end()) { delVals[arr[i]]--; if (delVals[arr[i]] == 0) delVals.erase(arr[i]); } else minVal = min(minVal, arr[i]); } return minVal; } int main(){ int array[] = { 5, 12, 33, 4, 56, 12, 20 }; int m = sizeof(array) / sizeof(array[0]); int del[] = { 12, 4, 56, 5 }; int n = sizeof(del) / sizeof(del[0]); cout<<"The smallest value after the deleting element is "<<findSmallestVal(array, m, del, n); return 0; }
ผลลัพธ์
The smallest value after the deleting element is 12