ধরুন আমাদের টাইমম্যাপ নামে একটি টাইম-ভিত্তিক কী-মানের স্টোর ক্লাস তৈরি করতে হবে, যা দুটি ক্রিয়াকলাপ সমর্থন করে৷
-
সেট(স্ট্রিং কী, স্ট্রিং মান, int টাইমস্ট্যাম্প):এটি প্রদত্ত টাইমস্ট্যাম্প সহ কী এবং মান সংরক্ষণ করবে।
-
get(string key, int টাইমস্ট্যাম্প):এটি একটি মান ফিরিয়ে দেবে যেমন সেট(কী, মান, টাইমস্ট্যাম্প_প্রেভ) পূর্বে টাইমস্ট্যাম্প_প্রেভ <=টাইমস্ট্যাম্প সহ কল করা হয়েছিল।
এখন যদি এই ধরনের একাধিক মান থাকে তবে এটি অবশ্যই সেই মানটি ফেরত দেবে যেখানে টাইমস্ট্যাম্প_প্রেভ মানটি সবচেয়ে বড়। যদি এই ধরনের কোন মান না থাকে তবে এটি খালি স্ট্রিং ("") প্রদান করে। তাই যদি আমরা নিচের মত ফাংশন কল −
সেট("foo","বার",1), get("foo",1), get("foo",3), সেট("foo","bar2",4), সেট("foo", 4), সেট("foo",5), তারপর আউটপুট হবে:[null, “bar”, “bar”, null, “bar2”, “bar2]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি মানচিত্র m
সংজ্ঞায়িত করুন -
সেট() পদ্ধতির মত হবে
-
m[key]
-এ (টাইমস্ট্যাম্প, মান) সন্নিবেশ করান
-
-
get() পদ্ধতিটি নিম্নরূপ কাজ করবে
-
ret :=একটি খালি স্ট্রিং
-
v :=m[কী]
-
কম :=0 এবং উচ্চ :=v – 1
এর আকার -
যখন কম <=উচ্চ
-
মধ্য :=নিম্ন + (উচ্চ - নিম্ন) / 2
-
যদি v[mid] <=টাইমস্ট্যাম্পের কী, তাহলে
-
ret :=v[mid] এর মান এবং কম সেট করুন :=mid + 1
-
-
অন্যথায় উচ্চ :=মধ্য – 1
-
-
রিটার্ন রিটার্ন
-
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class TimeMap {
public:
/** Initialize your data structure here. */
unordered_map <string, vector < pair <int, string> > > m;
TimeMap() {
m.clear();
}
void set(string key, string value, int timestamp) {
m[key].push_back({timestamp, value});
}
string get(string key, int timestamp) {
string ret = "";
vector <pair <int, string> >& v = m[key];
int low = 0;
int high = v.size() - 1;
while(low <= high){
int mid = low + (high - low) / 2;
if(v[mid].first <= timestamp){
ret = v[mid].second;
low = mid + 1;
}else{
high = mid - 1;
}
}
return ret;
}
};
main(){
TimeMap ob;
(ob.set("foo","bar",1));
cout << (ob.get("foo", 1)) << endl;
cout << (ob.get("foo", 3)) << endl;
(ob.set("foo","bar2",4));
cout << (ob.get("foo", 4)) << endl;
cout << (ob.get("foo", 5)) << endl;
} ইনপুট
Initialize it then call set and get methods as follows:
set("foo","bar",1))
get("foo", 1))
get("foo", 3))
set("foo","bar2",4))
get("foo", 4))
get("foo", 5)) আউটপুট
bar bar bar2 bar2