কম্পিউটার

C++-এ একটি অ্যারেতে k শক্তিশালী মান


ধরুন আমাদের কাছে arr এবং একটি পূর্ণসংখ্যা 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 :=arr এর আকার

  • m :=arr[(n - 1)/2]

  • জোড়ার একটি অ্যারে v সংজ্ঞায়িত করুন

  • i :=0, j :=n - 1

  • একটি অ্যারে ret সংজ্ঞায়িত করুন

  • যখন k অ-শূন্য, প্রতিটি পুনরাবৃত্তিতে k হ্রাস করুন, −

    করুন
    • x1 :=|arr[j]- m|

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

    • x1>=x2 হলে −

      • ret এর শেষে arr[j] ঢোকান

      • (j 1 দ্বারা কমিয়ে দিন)

    • অন্যথায়

      • ret এর শেষে 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

  2. C++ এ একটি সমষ্টি অ্যারে ধাঁধা?

  3. একটি C++ ফাংশনে একটি 2D অ্যারে পাস করা

  4. একটি C++ ফাংশনে একটি অ্যারে পাস করা