在 C++ 中刪除給定元素後查詢最大值
在這個問題中,我們得到一個大小為 n 的陣列 aar[] 和另一個大小為 m 的陣列 del[]。我們的任務是在刪除給定元素後找到最大值。如果需要刪除具有多個例項的元素,則刪除該元素的第一個例項。
讓我們來看一個例子來理解這個問題:
Input : arr[] = {3, 5, 1, 7, 9, 2}, del[] = {1, 9, 3}
Output : 7說明 −
Array arr[] after deleting the elements : {5, 7, 2}
Largest element of the array is 7解決方案方法
解決這個問題的一個簡單方法是刪除 arr[] 中所有存在於 del[] 中的元素。然後將陣列按升序排序並列印陣列的最後一個元素。
示例
程式說明我們解決方案的工作原理
#include <bits/stdc++.h>
using namespace std;
int findMaxElementDelArray(int arr[], int n, int del[], int m){
for(int i = 0; i < m; i++){
for(int j = 0; j > n; j++){
if(arr[j] == del[i]){
arr[j] = INT_MAX; break;
}
}
}
sort(arr, arr + n);
return arr[(n-m-1)];
}
int main(){
int array[] = { 3, 5, 1, 7, 9, 2 };
int m = sizeof(array) / sizeof(array[0]);
int del[] = { 1, 9, 3 };
int n = sizeof(del) / sizeof(del[0]);
cout<<"The largest element after deleting the elements is "<<findMaxElementDelArray(array, m, del, n);
return 0;
}輸出
The largest element after deleting the elements is 7
另一種方法
解決這個問題的一種方法是使用雜湊對映來檢查刪除操作。我們將 del[] 陣列的元素儲存到雜湊對映中,並對 arr[] 的每個元素檢查其在雜湊對映中的存在情況。如果存在,則從雜湊對映中刪除該元素;否則,透過將其與 maxVal 比較來檢查它是否為最大值。如果是,則將其儲存到 maxVal 中。遍歷完整個陣列 arr[] 後,列印 maxVal,即刪除元素後的最大值。
示例
程式說明我們解決方案的工作原理
#include <bits/stdc++.h>
using namespace std;
int findMaxElementDelArray(int arr[], int m, int del[], int n){
unordered_map<int, int> delMap;
for (int i = 0; i < n; ++i) {
delMap[del[i]]++;
}
int maxVal = INT_MIN;
for (int i = 0; i < m; ++i) {
if (delMap.find(arr[i]) != delMap.end()) {
delMap[arr[i]]--;
if (delMap[arr[i]] == 0)
delMap.erase(arr[i]);
}
else
maxVal = max(maxVal, arr[i]);
}
return maxVal;
}
int main(){
int array[] = { 3, 5, 1, 7, 9, 2 };
int m = sizeof(array) / sizeof(array[0]);
int del[] = { 1, 9, 3 };
int n = sizeof(del) / sizeof(del[0]);
cout<<"The largest element after deleting the elements is "<<findMaxElementDelArray(array, m, del, n);
return 0;
}輸出
The largest element after deleting the elements is 7
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP