Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm giá trị nhỏ nhất sau khi xóa các phần tử đã cho bằng C ++

Trong bài toán này, chúng ta được cung cấp hai mảng arr [] và del []. Nhiệm vụ của chúng tôi là tìm phần tử nhỏ nhất sau khi xóa các phần tử đã cho .

Chúng tôi sẽ xóa các giá trị khỏi mảng arr [] có trong del []. Và sau đó in giá trị nhỏ nhất sau khi xóa.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

arr[] = {2, 5, 6, 9, 1}
del[] = {1, 5, 9}

Đầu ra

2

Phương pháp tiếp cận giải pháp

Một giải pháp đơn giản cho vấn đề là sử dụng băm. Chúng tôi sẽ chèn tất cả các giá trị của mảng del [] trong bảng băm. Sau đó, chúng tôi sẽ duyệt qua mảng arr [] và kiểm tra xem các giá trị trong bảng băm. Nếu nó nhỏ hơn minVal. Nếu có, hãy in minVal.

Ví dụ

Chương trình minh họa hoạt động của giải pháp của chúng tôi

#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;
}

Đầu ra

The smallest value after the deleting element is 12