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

C++ में Find K Closest Elements


मान लीजिए हमारे पास एक क्रमबद्ध सरणी है, दो पूर्णांक k और x भी दिए गए हैं, हमें उस सरणी में x के k निकटतम तत्व ढूंढने हैं। परिणाम को बढ़ते क्रम में क्रमबद्ध किया जाना चाहिए। यदि टाई है, तो छोटे तत्वों को हमेशा प्राथमिकता दी जाती है। इसलिए यदि इनपुट [1,2,3,4,5] जैसा है और k = 4, x = 3, तो आउटपुट [1,2,3,4] होगा।

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

  • ans नामक एक सरणी बनाएं
  • low := 0 सेट करें, high := सरणी का आकार - k
  • जब तक low < high
    • mid := low + (high - low) /2
    • यदि x - arr[mid] > arr[mid + k] - x, तो low := mid + 1, अन्यथा high := mid
  • i को low से low + k तक की रेंज में
    • arr[i] को ans सरणी में सम्मिलित करें
  • ans लौटाएं

उदाहरण (C++)

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

#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    } cout << "]"<<endl; } class Solution { public:    vector<int> findClosestElements(vector<int>& arr, int k, int x) {       vector <int> ans;       int low = 0;       int high = arr.size() - k;       while(low < high){          int mid = low + (high - low)/2;          if(x - arr[mid] > arr[mid + k] - x){             low = mid + 1;          }          else high = mid;       }       for(int i = low ; i < low + k ; i++)ans.push_back(arr[i]);       return ans;    } }; main(){    Solution ob;    vector<int> v = {1,2,3,4,5};    print_vector(ob.findClosestElements(v, 4, 3)); }

इनपुट

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

आउटपुट

[1,2,3,4]

  1. C++ में दूषित बाइनरी ट्री में तत्व खोजें C++ में दूषित बाइनरी ट्री में तत्व खोजें

    मान लीजिए हमारे पास एक बाइनरी ट्री है। उस ट्री के नियम इस प्रकार हैं: root.val == 0 यदि treeNode.val x है और treeNode.left null नहीं है, तो treeNode.left.val = 2 * x + 1 यदि treeNode.val x है और treeNode.right null नहीं है, तो treeNode.right.val = 2 * x + 2 अब चूंकि बाइनरी ट्री दूषित है। यह इंगि

  1. - C++ में निकटतम और छोटी टाइडी संख्या ढूंढें

    मान लीजिए हमारे पास एक संख्या n है, हमें n की निकटतम और छोटी टाइडी संख्या ढूंढनी है। एक संख्या को टाइडी संख्या कहा जाता है, यदि इसके सभी अंक नॉन-डिक्रीजिंग क्रम में सॉर्टेड हैं। तो यदि संख्या 45000 है, तो निकटतम और छोटी टाइडी संख्या 44999 होगी। इस समस्या को हल करने के लिए, हम अंत से संख्या को पार

  1. C++ में बाइनरी ट्री में निकटतम लीफ ढूंढें C++ में बाइनरी ट्री में निकटतम लीफ ढूंढें

    मान लीजिए, एक बाइनरी ट्री दिया गया है। इसमें अलग-अलग लेवल पर लीफ नोड्स हैं। एक और पॉइंटर दिया गया है, जो एक नोड को इंगित कर रहा है। हमें इंगित नोड से निकटतम लीफ नोड की दूरी ढूंढनी है। ट्री को नीचे जैसा मानें - यहां लीफ नोड्स 2, -2 और 6 हैं। यदि पॉइंटर नोड -5 पर इंगित कर रहा है, तो -5 से निकटतम नोड