মান করুন কিছু লোক ফ্রেন্ড রিকোয়েস্ট করবে। আমরা তাদের বয়স জানি, যা ages[i]-এ সংরক্ষিত। এটি i-তম ব্যক্তির বয়স নির্দেশ করে। এখন A ব্যক্তি B ব্যক্তিকে (B != A) ফ্রেন্ড রিকোয়েস্ট করবেন না যদি নিচের যেকোনো শর্ত সত্য হয় −
age[B] <= 0.5 * age[A] + 7age[B] > age[A]age[B] > 100 && age[A] < 100
অন্যথায়, A, B-কে ফ্রেন্ড রিকোয়েস্ট করবেন। মনে রাখবেন যদি A, B-কে রিকোয়েস্ট করে, তবে B আবশ্যকে A-কে রিকোয়েস্ট করবেন না। এবং কেউ নিজেকে ফ্রেন্ড রিকোয়েস্ট করবেন না। আমাদের বের করতে হবে মোট কতগুলো ফ্রেন্ড রিকোয়েস্ট হয়েছে?
যদি বয়স অ্যারে হয় [16,17,18], তবে ফলাফল হবে ২, কারণ রিকোয়েস্টগুলো হবে 17 → 16, 18 → 17।
এটি সমাধান করার জন্য নিচের ধাপগুলি অনুসরণ করুন −
- ১০০০ আকারের একটি
bucketঅ্যারে সংজ্ঞায়িত করুন, তারপরagesঅ্যারের উপাদানগুলির ফ্রিকোয়েন্সিbucket-এ সংরক্ষণ করুন - তারপর
bucketএলিমেন্টগুলোর ক্যুমুলেটিভ সম বের করেbucket-এ সংরক্ষণ করুন ret := 0i = 0থেকেagesঅ্যারের আকার - ১ পর্যন্তx := ages[i],y := (ages[i] / 2) + 7- যদি
x >= yহয়, তবেret := bucket[x] - bucket[y]- যদি
bucket[x] - bucket[y]নন-জিরো হয়, তবেret১ কমান
retফেরত দিন
উদাহরণ কোড
#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