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

C++ में 3Sum Smaller - लक्ष्य से कम त्रिक गिनें


समस्या विवरण

मान लीजिए हमारे पास n पूर्णांकों की सरणी nums है और एक लक्ष्य है, हमें सूचकांक त्रिक (i, j, k) की संख्या ढूंढनी है जहां i, j, k सभी 0 से n-1 की सीमा में हैं और nums[i] + nums[j] + nums[k] < लक्ष्य को संतुष्ट करते हैं।

उदाहरण के लिए, यदि nums = [-2,0,1,3] और लक्ष्य = 2 है, तो आउटपुट 2 होगा, क्योंकि दो त्रिक हैं जिनका योग 2 से कम है: [-2,0,1] और [-2,0,3]।

समाधान दृष्टिकोण

सॉर्टिंग + दो पॉइंटर तकनीक O(n^2) समय में:

  1. ret := 0
  2. सरणी a को सॉर्ट करें
  3. n := a का आकार
  4. i को 0 से n-3 तक लूप करें:
    • left := i + 1, right := n - 1
    • जब left < right:
      • sum := a[i] + a[left] + a[right]
      • यदि sum < लक्ष्य:
        • ret += right - left (बाएं और दाएं के बीच सभी वैध हैं)
        • left++
      • अन्यथा right--
  5. ret लौटाएं

C++ कार्यान्वयन

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

class Solution { 
public: 
    int threeSumSmaller(vector<int>& a, int t) { 
        int ret = 0; 
        sort(a.begin(), a.end()); 
        int n = a.size(); 
        for (int i = 0; i < n - 2; i++) { 
            int left = i + 1; 
            int right = n - 1; 
            while (left < right) { 
                int sum = a[i] + a[left] + a[right]; 
                if (sum < t) { 
                    ret += right - left; 
                    left++; 
                } 
                else 
                    right--; 
            } 
        } 
        return ret; 
    } 
}; 

int main(){ 
    Solution ob; 
    vector<int> v = {-2,0,1,3}; 
    cout << (ob.threeSumSmaller(v,2)); 
    return 0;
}

इनपुट

[-2,0,1,3] 2

आउटपुट

2
  1. C++ में डायगोनल ट्रैवर्स II C++ में डायगोनल ट्रैवर्स II

    मान लीजिए हमारे पास nums नामक लिस्ट ऑफ लिस्ट है, हमें nums के सभी एलिमेंट्स को डायगोनल क्रम में दिखाना है।इसलिए, यदि इनपुट हैतो आउटपुट होगा [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16]इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:एक ऐरे ret परिभाषित करेंएक 2D ऐरे v परिभाषित करेंi := 0 से शुरू करें,

  1. C++ में प्रोसेस मारें C++ में प्रोसेस मारें

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

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

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