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

C++ में सिंगल नंबर III (Single Number III)

मान लीजिए हमारे पास एक सरणी (array) है जिसमें ठीक दो तत्व केवल एक बार आते हैं, जबकि बाकी सभी तत्व दो बार आते हैं। हमें एक फ़ंक्शन परिभाषित करना है जो इन दो संख्याओं को ढूंढे। उदाहरण के लिए, यदि दी गई सरणी [1,2,3,1,5,2] है, तो आउटपुट [3, 5] होगा।

हल करने के चरण

  1. xor_res := 0 आरंभ करें।
  2. सरणी के प्रत्येक तत्व के लिए xor_res := xor_res XOR nums[i] करें।
  3. pos := 0 सेट करें।
  4. जब xor_res AND (1 << pos) == 0 हो, तब pos को 1 से बढ़ाते रहें। यह पहला सेट बिट ढूंढता है।
  5. num1 := 0 आरंभ करें।
  6. फिर से सरणी को पार करें: यदि (nums[i] & (1 << pos)) != 0 हो, तो num1 := num1 XOR nums[i] करें।
  7. num2 := xor_res XOR num1 की गणना करें।
  8. num1 और num2 लौटाएं।

C++ उदाहरण

#include <bits/stdc++.h>
using namespace std;

void print_vector(vector<int> v) {
    cout << "[";
    for (int i = 0; i < v.size(); i++) {
        cout << v[i] << ", ";
    }
    cout << "]" << endl;
}

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        int xor_result = 0;
        for (int i = 0; i < nums.size(); i++) {
            xor_result ^= nums[i];
        }
        int pos = 0;
        while ((xor_result & (1 << pos)) == 0) {
            pos++;
        }
        int num1 = 0;
        for (int i = 0; i < nums.size(); i++) {
            if ((nums[i] & (1 << pos)) != 0) {
                num1 ^= nums[i];
            }
        }
        int num2 = xor_result ^ num1;
        return {num1, num2};
    }
};

int main() {
    Solution ob;
    vector<int> v = {1, 2, 1, 3, 2, 5};
    print_vector(ob.singleNumber(v));
    return 0;
}

इनपुट

[1,2,1,3,2,5]

आउटपुट

[3, 5]
  1. भूलभुलैया III - C++ भूलभुलैया III - C++

    मान लीजिए एक भूलभुलैया है जिसमें खाली स्थान और दीवारें हैं और उस भूलभुलैया में एक गेंद भी है। गेंद ऊपर (u), नीचे (d), बाएं (l) या दाएं (r) दिशाओं में लुढ़ककर खाली स्थानों से गुजर सकती है, लेकिन यह दीवार से टकराने तक लुढ़कती रहती है। जब गेंद रुकती है, तो यह अगली दिशा चुन सकती है। उस भूलभुलैया में एक

  1. C++ में स्पाइरल मैट्रिक्स III (Spiral Matrix III) C++ में स्पाइरल मैट्रिक्स III (Spiral Matrix III)

    मान लीजिए हमारे पास R पंक्तियों और C स्तंभों वाला एक 2-आयामी ग्रिड है, हम (r0, c0) से शुरू करते हैं और पूर्व की ओर मुख किए होते हैं। यहां, ग्रिड का उत्तर-पश्चिम कोना पहली पंक्ति और स्तंभ पर है, और दक्षिण-पूर्व कोना अंतिम पंक्ति और स्तंभ पर है। हम इस ग्रिड में हर स्थिति को देखने के लिए दक्षिणावर्त स

  1. C++ में बल्ब स्विचर III C++ में बल्ब स्विचर III

    मान लीजिए हमारे पास n बल्ब्स वाला एक कमरा है, ये 1 से n तक नंबरेड हैं, बाएं से दाएं एक पंक्ति में व्यवस्थित। प्रारंभ में, सभी बल्ब्स बंद हैं। मोमेंट k पर (k के लिए 0 से n-1 की रेंज में), हम light[k] बल्ब को ऑन करते हैं। एक बल्ब केवल तभी नीला होता है जब वह ऑन हो और उसके सभी पिछले बल्ब (बाएं तरफ) भी