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

C++ में किसी सरणी में k सबसे मजबूत मान

मान लीजिए कि हमारे पास एआर नामक संख्याओं की एक सरणी है और एक पूर्णांक k है। एक मूल्य arr[i] है जिसे एक मूल्य arr[j] से अधिक मजबूत कहा जाता है जब |arr[i] - m|> |arr[j] - m| जहाँ m सरणी की माध्यिका है। अगर |arr[i] - m| |arr[j] - m| के समान है, तो arr[i] को arr[j] से अधिक मजबूत कहा जाता है यदि arr[i]> arr[j]। इसलिए हमें सरणी में सबसे मजबूत k मानों की एक सूची ढूंढनी होगी।

इसलिए, यदि इनपुट arr =[1,2,3,4,5], k =2 जैसा है, तो आउटपुट [5,1] होगा, इसका कारण यह है कि माध्यिका 3 है, और सरणी के तत्वों को क्रमबद्ध किया गया है सबसे मजबूत हैं [5,1,4,2,3]। यहां सबसे मजबूत 2 तत्व हैं [5, 1]। [1, 5] भी मान्य है। हालांकि |5 - 3| के समान है |1 - 3| लेकिन 5 1 से ज्यादा मजबूत है क्योंकि 5> 1.

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

  • सरणी को क्रमबद्ध करें

  • n :=गिरफ्तारी का आकार

  • मी :=एआर [(एन -1)/2]

  • जोड़े की एक सरणी v परिभाषित करें

  • मैं :=0, जे :=n - 1

  • एक सरणी रिट परिभाषित करें

  • जबकि k गैर-शून्य है, प्रत्येक पुनरावृत्ति में k घटाएं, −

    . करें
    • x1 :=|arr[j]- m|

    • x2 :=|arr[i]- m|

    • यदि x1>=x2, तो -

      • रिट के अंत में arr[j] डालें

      • (j को 1 से घटाएं)

    • अन्यथा

      • रिट के अंत में arr[i] डालें

      • (i 1 से बढ़ाएँ)

  • वापसी रिट

उदाहरण

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

#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:
   int calc(int x, int m){
      return abs(x - m);
   }
   vector<int> getStrongest(vector<int>& arr, int k) {
      sort(arr.begin(), arr.end());
      int n = arr.size();
      int m = arr[(n - 1) / 2];
      vector<pair<int, int> > v;
      int i = 0;
      int j = n - 1;
      vector<int> ret;
      while (k--) {
         int x1 = calc(arr[j], m);
         int x2 = calc(arr[i], m);
         if (x1 >= x2) {
            ret.push_back(arr[j]);
            j--;
         }
         else {
            ret.push_back(arr[i]);
            i++;
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,3,4,5};
   print_vector(ob.getStrongest(v,2));
}

इनपुट

{1,2,3,4,5},2

आउटपुट

[5, 1, ]

  1. C++ . में भूलभुलैया III

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

  1. C++ फ़ंक्शन में 2D सरणी पास करना

    किसी फ़ंक्शन को तर्क के रूप में Arrays को पारित किया जा सकता है। इस कार्यक्रम में, हम 2 आयामी सरणी के तत्वों को एक फ़ंक्शन में पास करके प्रदर्शित करने के लिए प्रदर्शन करेंगे। एल्गोरिदम Begin The 2D array n[][] passed to the function show(). Call function show() function, the array n (n) is tra

  1. एक सी ++ फ़ंक्शन में एक सरणी पास करना

    C++ फ़ंक्शन के तर्क के रूप में संपूर्ण सरणी को पारित करने की अनुमति नहीं देता है। हालांकि, आप किसी इंडेक्स के बिना ऐरे का नाम निर्दिष्ट करके किसी ऐरे को पॉइंटर पास कर सकते हैं। यदि आप किसी फ़ंक्शन में एक एकल-आयाम सरणी को तर्क के रूप में पास करना चाहते हैं, तो आपको निम्नलिखित तीन तरीकों में से एक मे