ধরুন কিছু লোক ফ্রেন্ড রিকোয়েস্ট করবে। আমরা তাদের বয়স জানি, এগুলি যুগে সংরক্ষিত হয় [i]। সুতরাং এটি ইথ ব্যক্তির বয়স নির্দেশ করে। এখন A A বন্ধুত্বের অনুরোধ করবে না B (B !=A) যদি নিম্নলিখিত শর্তগুলির মধ্যে কোনোটি সত্য হয় −
- বয়স[B] <=0.5 * বয়স[A] + 7
- বয়স[B]> বয়স[A]
- বয়স[B]> 100 &&বয়স[A] <100
অন্যথায়, A, B কে বন্ধুত্বের অনুরোধ করবে। আপনি বিবেচনা করতে পারেন যে A যদি B অনুরোধ করে, B অগত্যা Aকে অনুরোধ করে না। এবং এছাড়াও, লোকেরা নিজেরা বন্ধুত্বের অনুরোধ করবে না। তাই আমাদের খুঁজে বের করতে হবে মোট কতটি বন্ধুর অনুরোধ করা হয়েছে?
ধরুন বয়সের অ্যারে যদি [16,17,18] এর মত হয়, তাহলে ফলাফল 2 হবে, যেমন অনুরোধগুলি হবে 17 -> 16, 18 -> 17।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- 1000 আকারের একটি অ্যারে বালতি সংজ্ঞায়িত করুন, তারপর বালতিতে বয়সের অ্যারে উপাদানগুলির ফ্রিকোয়েন্সি সংরক্ষণ করুন৷
- তারপরে বালতি উপাদানের ক্রমবর্ধমান সমষ্টি খুঁজুন এবং সংরক্ষণ করুন, বালতিতে
- ret :=0
- আমার জন্য 0 থেকে সাইজের বয়সের অ্যারে - 1
- x :=বয়স[i], y :=(বয়স[i] / 2) + 7
- যদি x>=y, তারপর
- ret :=bucket[x] – bucket[y]
- যদি bucket[x] – bucket[y] অ-শূন্য হয়, তাহলে ret 1 কমিয়ে দিন
- রিটার্ন রিটার্ন।
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h> using namespace std; class Solution { public: int numFriendRequests(vector<int>& ages) { vector <int> bucket(1000); for(int i = 0; i < ages.size(); i++){ bucket[ages[i]]++; } for(int i = 1; i < 1000; i++)bucket[i] += bucket[i - 1]; int ret = 0; for(int i = 0; i < ages.size(); i++){ int x = ages[i]; int y = ((ages[i]) / 2) + 7; if(x >= y){ ret += (bucket[x] - bucket[y]); if((bucket[x] - bucket[y])) ret--; } } return ret; } }; main(){ vector<int> v1 = {16, 17, 18}; Solution ob; cout << (ob.numFriendRequests(v1)); }
ইনপুট
[16,17,18]
আউটপুট
2