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

C++ में क्रमपरिवर्तन II


मान लीजिए कि हमारे पास अलग-अलग पूर्णांकों का संग्रह है; हमें सभी संभावित क्रमपरिवर्तन खोजने होंगे। अब यदि सरणी डुप्लिकेट तत्वों को संग्रहीत करती है, तो उस स्थिति को अनदेखा करें जो समान दिख रही है। तो अगर सरणी [1,1,3] की तरह है, तो परिणाम [[1,1,3], [1,3,1], [3,1,1]]

होगा।

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

  • हम पुनरावर्ती दृष्टिकोण का उपयोग करेंगे, इससे सूची, अनुक्रमणिका बन जाएगी। सूचकांक प्रारंभ में 0
  • . है
  • यदि अनुक्रमणिका =सूची का आकार है तो सूची को रेस सरणी में डालें, और वापस लौटें
  • के लिए मैं दी गई सूची की लंबाई के लिए श्रेणी सूचकांक में - 1
    • यदि सूची [i] =सूची [सूचकांक] और मैं अनुक्रमणिका के समान नहीं हैं, तो अगला चरण देखे बिना जारी रखें
    • सूचकांक प्रारंभ में मौजूद सूची के तत्वों की अदला-बदली करें और मैं
    • क्रमपरिवर्तन(सूची, प्रारंभ + 1)
  • शुरुआत में क्रमपरिवर्तन (सूची) को कॉल करें, और फिर से वापसी करें

उदाहरण(C++)

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

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<int> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector < vector <int> > res;
   void solve(vector <int> nums, int idx = 0){
      if(idx == nums.size()){
         res.push_back(nums);
         return;
      }
      for(int i = idx; i <nums.size(); i++){
         if(nums[i] == nums[idx] && i != idx)continue;
         swap(nums[i], nums[idx]);
         solve(nums, idx + 1);
      }
   }
   vector<vector<int>> permuteUnique(vector<int>& nums) {
      res.clear();
      sort(nums.begin(), nums.end());
      solve(nums);
      return res;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,1,3};
   print_vector(ob.permuteUnique(v));
}

इनपुट

[1,1,3]

आउटपुट

[[1,1,3],[1,3,1],[3,1,1]]

  1. सी ++ में प्रक्रिया को मारें

    मान लीजिए कि हमारे पास n प्रक्रियाएं हैं, यहां प्रत्येक प्रक्रिया की एक विशिष्ट आईडी होती है जिसे PID या प्रक्रिया आईडी कहा जाता है और उसका PPID (पैरेंट प्रोसेस आईडी) भी होता है। प्रत्येक प्रक्रिया में केवल एक पैरेंट प्रक्रिया होती है, लेकिन इसमें एक या अधिक चाइल्ड प्रक्रियाएं हो सकती हैं। यह एक प

  1. सी ++ में गिलहरी सिमुलेशन

    एक पेड़, एक गिलहरी, और कई नट हैं। स्थितियों को 2डी ग्रिड में कोशिकाओं द्वारा दर्शाया जाता है। आपका लक्ष्य गिलहरी के लिए सभी नटों को इकट्ठा करने और उन्हें एक-एक करके पेड़ के नीचे रखने के लिए न्यूनतम दूरी का पता लगाना है। गिलहरी एक समय में केवल एक अखरोट ले सकती है और चार दिशाओं में - ऊपर, नीचे, बाएँ औ

  1. C++ में आयत क्षेत्र II

    मान लीजिए कि हमारे पास (अक्ष-संरेखित) आयतों की एक सूची है। यहाँ प्रत्येक आयत [i] ={x1, y1, x2, y2}, जहाँ (x1, y1) निचले-बाएँ कोने का बिंदु है, और (x2, y2) ऊपरी-दाएँ कोने के बिंदु हैं आयत। हमें समतल में सभी आयतों द्वारा कवर किया गया कुल क्षेत्रफल ज्ञात करना है। उत्तर बहुत हो सकता है, इसलिए हम मॉड्यू