Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

अधिकतम बनाने के लिए सरणी से न्यूनतम निष्कासन - न्यूनतम <=K में C++

समस्या कथन

N पूर्णांकों और K को देखते हुए, हटाए जाने वाले तत्वों की न्यूनतम संख्या ज्ञात कीजिए जैसे कि Amax - Amin <=K. तत्वों को हटाने के बाद, Amax और Amin को शेष तत्वों में माना जाता है

उदाहरण

अगर arr[] ={1, 3, 4, 9, 10, 11, 12, 17, 20} और k =4 तो आउटपुट 5 होगा:

  • एक सरणी की शुरुआत से 1, 3 और 4 निकालें
  • सरणी के अंत से 17 और 20 निकालें
  • अंतिम सरणी {9, 10, 11, 12} बन जाती है जहां 12 - 9 <=4

एल्गोरिदम

1. Sort the given elements
2. Using greedy approach, the best way is to remove the minimum element or the maximum element and then check if Amax - Amin <= K. There are various combinations of removals that have to be considered.
3. There will be two possible ways of removal, either we remove the minimum or we remove the maximum. Let(i…j) be the index of elements left after removal of elements. Initially, we start with i=0 and j=n-1 and the number of elements removed is 0 at the beginnings.
4. We only remove an element if a[j]-a[i]>k, the two possible ways of removal are (i+1…j) or (i…j-1). The minimum of the two is considered

उदाहरण

#include <bits/stdc++.h>
#define MAX 100
using namespace std;
int dp[MAX][MAX];
int removeCombinations(int *arr, int i, int j, int k) {
   if (i >= j) {
   return 0;
   } else if ((arr[j] - arr[i]) <= k) {
      return 0;
   } else if (dp[i][j] != -1) {
      return dp[i][j];
   } else if ((arr[j] - arr[i]) > k) {
      dp[i][j] = 1 + min(removeCombinations(arr, i +
      1, j, k),
      removeCombinations(arr, i, j - 1,k));
   }
   return dp[i][j];
}
int removeNumbers(int *arr, int n, int k){
   sort(arr, arr + n);
   memset(dp, -1, sizeof(dp));
   return n == 1 ? 0 : removeCombinations(arr, 0, n - 1,k);
}
int main() {
   int arr[] = {1, 3, 4, 9, 10, 11, 12, 17, 20};
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 4;
   cout << "Minimum numbers to be removed = " <<
   removeNumbers(arr, n, k) << endl;
   return 0;
}

जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्न आउटपुट उत्पन्न करता है

आउटपुट

Minimum numbers to be removed = 5

  1. C++ में को-प्राइम ऐरे बनाने के लिए न्यूनतम इंसर्शन

    इस खंड में हम एक और दिलचस्प समस्या देखेंगे। मान लीजिए कि हमारे पास एन तत्वों की एक सरणी है। इस सरणी को सह-अभाज्य सरणी बनाने के लिए हमें न्यूनतम संख्या में प्रतिच्छेदन बिंदु खोजने होंगे। को-प्राइम एरे में हर दो लगातार एलीमेंट का gcd 1 होता है। हमें ऐरे को भी प्रिंट करना होता है। मान लीजिए हमारे पास

  1. सी ++ में सरणी के सभी तत्वों को समान बनाने के लिए न्यूनतम डिलीट ऑपरेशंस।

    समस्या कथन n तत्वों की एक सरणी को देखते हुए जैसे कि तत्व दोहरा सकते हैं। हम सरणी से किसी भी संख्या में तत्वों को हटा सकते हैं। कार्य इसे समान बनाने के लिए सरणी से हटाए जाने वाले तत्वों की न्यूनतम संख्या को खोजना है। arr[] = {10, 8, 10, 7, 10, -1, -4, 12} सभी सरणी तत्वों को समान बनाने के लिए हमें ह

  1. पायथन में जीसीडी ग्रेटर बनाने के लिए सरणी से न्यूनतम निष्कासन

    मान लीजिए हमारे पास एन नंबरों की एक सूची है; हमें संख्याओं को हटाने की न्यूनतम संख्या ज्ञात करनी होगी ताकि शेष संख्याओं का GCD N संख्याओं के प्रारंभिक GCD से बड़ा हो। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - आईएनएफ:=100001 spf :=0 से INF के तत्वों वाली एक सूची फ़ंक्शन चलनी को परिभाषित करे