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

C++ में K व्युत्क्रम जोड़े सरणी

मान लीजिए कि हमारे पास दो पूर्णांक n और k हैं, तो हमें यह पता लगाना होगा कि 1 से n तक की कितनी अलग-अलग सरणियाँ हैं, जैसे कि k व्युत्क्रम जोड़े हैं। व्युत्क्रम जोड़ी सरणी में ith और jth तत्वों के लिए है, यदि i a[j] तो इसे व्युत्क्रम युग्म कहा जाता है। यहाँ उत्तर बहुत बड़ा हो सकता है, उत्तर होना चाहिए मॉड्यूलो $10^{9}$ + 7.

इसलिए यदि इनपुट n =3 और k =1 जैसा है, तो आउटपुट 2 होगा क्योंकि सरणी [1,3,2] और [2,1,3] में केवल एक उलटा जोड़ा होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक 2D सरणी dp आकार (n + 1) x (k + 1) परिभाषित करें
  • dp[0, 0] :=1
  • इनिशियलाइज़ i :=1 के लिए, जब i<=n, अपडेट करें (i को 1 से बढ़ाएँ), −
      करें
    • dp[i, 0] :=1
    • इनिशियलाइज़ j :=1 के लिए, जब j <=k, अपडेट करें (j को 1 से बढ़ाएँ), −
        करें
      • dp[i, j] :=dp[i, j-1] + dp[i-1, j]
      • dp[i, j] :=dp[i, j] mod m
      • यदि j>=i, तो −
        • dp[i, j] :=(dp[i, j] - dp[i – 1, j - i] + m) मॉड m
  • रिटर्न डीपी[एन, के]

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
const int m = 1e9 + 7;
class Solution {
public:
   int kInversePairs(int n, int k) {
      vector < vector <int> > dp(n + 1, vector <int>(k + 1));
      dp[0][0] = 1;
      for(int i = 1; i <= n; i++){
         dp[i][0] = 1;
         for(int j = 1; j <= k; j++){
            dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
            dp[i][j] %= m;
            if(j >= i){
               dp[i][j] = (dp[i][j] - dp[i - 1][j - i] + m) % m;
            }
         }
      }
      return dp[n][k];
   }
};
main(){
   Solution ob;
   cout << (ob.kInversePairs(4,2));
}

इनपुट

4
2

आउटपुट

5

  1. एक सरणी में सभी जोड़े (ए, बी) खोजें जैसे कि सी ++ में% बी =के

    मान लीजिए कि हमारे पास एक सरणी ए है, उस सरणी से, हमें सभी जोड़े (ए, बी) प्राप्त करना है जैसे कि ए% बी =के। मान लीजिए कि सरणी A =[2, 3, 4, 5, 7] और k =3 है, तो जोड़े (7, 4), (3, 4), (3, 5), (3, 7) हैं। इसे हल करने के लिए, हम सूची को देखेंगे और जांचेंगे कि दी गई शर्त संतोषजनक है या नहीं। उदाहरण #inc

  1. सी ++ स्ट्रिंग्स की सरणी

    इस खंड में हम देखेंगे कि C++ में स्ट्रिंग्स की एक सरणी को कैसे परिभाषित किया जाए। जैसा कि हम जानते हैं कि सी में कोई तार नहीं था। हमें कैरेक्टर ऐरे का उपयोग करके स्ट्रिंग्स बनाना है। इसलिए स्ट्रिंग्स की कुछ सरणी बनाने के लिए, हमें वर्णों की एक 2-आयामी सरणी बनानी होगी। प्रत्येक पंक्तियाँ उस मैट्रिक्स

  1. सी++ में छँटाई

    इस खंड में हम देखेंगे कि C++ में सॉर्टिंग एल्गोरिथम कैसे किया जाता है। एक क्रमबद्ध सरणी एक सरणी है जिसमें प्रत्येक तत्व को किसी क्रम में क्रमबद्ध किया जाता है जैसे संख्यात्मक, वर्णानुक्रम आदि। संख्यात्मक सरणी को सॉर्ट करने के लिए कई एल्गोरिदम हैं जैसे कि बबलसॉर्ट, इंसर्शन सॉर्ट, सेलेक्शन सॉर्ट, मर्ज