একটি সিঙ্গেল-থ্রেডেড CPU-তে কিছু ফাংশন এক্সিকিউট হয়। প্রতিটি ফাংশন mempunyai ০ থেকে N-1 পর্যন্ত унікаল আইডি। লগগুলো টাইমস্ট্যাম্প অর্ডারে স্টোর করা থাকে যা ফাংশন কখন শুরু ও শেষ হয় তা বলে। প্রতিটি লগ স্ট্রিং ফরম্যাট: "{function_id}:{"start" | "end"}:{timestamp}"। যেমন "0:start:3" মানে আইডি ০-র ফাংশন টাইমস্ট্যাম্প ৩-র শুরুতে আরম্ভ হয়। "1:end:2" মানে আইডি ১-র ফাংশন টাইমস্ট্যাম্প ২-র শেষে শেষ হয়। একটি ফাংশনের এক্সক্লুসিভ টাইম হলো সেটি এক্সিকিউট হওয়ার সময় একক।
উদাহরণ: n = 2, logs = ["0:start:0","1:start:2","1:end:5","0:end:6"] হলে আউটপুট [3,4]। কারণ ফাংশন ০ টাইম ০-তে শুরু করে, ২ ইউনিট এক্সিকিউট হয়ে টাইম ১-এ শেষ হয়। তারপর ফাংশন ১ টাইম ২-তে শুরু করে ৪ ইউনিট এক্সিকিউট হয়ে টাইম ৫-এ শেষ হয়। ফাংশন ০ আবার টাইম ৬-তে শুরু করে টাইম ৬-এ শেষ হয়, ১ ইউনিট এক্সিকিউট হয়। মোট ফাংশন ০: ২+১=৩, ফাংশন ১: ৪।
সমাধানের ধাপগুলো:
retআকারn-এর অ্যারে,stস্ট্যাক।j := 0, prev := 0i = 0থেকেlogs.size()-1পর্যন্ত:temp := logs[i], j := 0, id := 0, num := 0, type := খালি স্ট্রিংtemp[j]কোলন না হওয়া পর্যন্ত:id := id*10 + temp[j]-'0',j++j++temp[j]কোলন না হওয়া পর্যন্ত:type += temp[j],j++j++j < temp.size()रहने পর্যন্ত:num := num*10 + temp[j]-'0',j++- যদি
type == "start":- যদি
stখালি না হয়:ret[st.top()] += num - prev st.push(id), prev := num
- যদি
- অন্যথায়:
x := st.top(), st.pop()ret[x] += (num + 1) - prevprev := num + 1
retফেরত দিন।
উদাহরণ (C++)
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> exclusiveTime(int n, vector<string>& logs) { vector <int> ret(n); stack <int> st; int id, num; int j = 0; string temp; string type; int prev = 0; for(int i = 0; i < logs.size(); i++){ temp = logs[i]; j = 0; id = 0; num = 0; type = ""; while(temp[j] != ':'){ id = id * 10 + (temp[j] - '0'); j++; } j++; while(temp[j] != ':'){ type += temp[j]; j++; } j++; while(j < temp.size()){ num = num * 10 + temp[j] - '0'; j++; } if(type == "start"){ if(!st.empty()){ ret[st.top()] += num - prev; } st.push(id); prev = num; } else { int x = st.top(); st.pop(); ret[x] += (num + 1) - prev; prev = num + 1; } } return ret; } }; main(){ vector<string> v = {"0:start:0","1:start:2","1:end:5","0:end:6"}; Solution ob; print_vector(ob.exclusiveTime(2, v)); }ইনপুট
2 ["0:start:0","1:start:2","1:end:5","0:end:6"]
আউটপুট
[3, 4, ]