একটি টেবিল দেওয়া আছে যার দুটি কলাম (birth, death) - প্রতিটি সারি i-তম ব্যক্তির জন্ম ও মৃত্যু বছর নির্দেশ করে। y বছরের জনসংখ্যা হলো y বছরে কতজন জীবিত ছিল। i-তম ব্যক্তি y বছরে গণনা হবে যদি y ∈ [birth_i, death_i - 1] হয় (মৃত্যু বছরে তাদের গণনা করা হয় না)। আমাদের কাজ হলো সর্বোচ্চ জনসংখ্যা থাকা সবচেয়ে প্রাচীন বছর বের করা।
যেমন, ইনপুট:
| Birth | Death |
| 1970 | 2010 |
| 1960 | 2020 |
| 1940 | 1970 |
আউটপুট: 1960 (কারণ ১৯৬০ সালে সর্বোচ্চ ২ জন জীবিত ছিল)।
সমাধানের ধাপসমূহ
- d := একটি ম্যাপ (ডিফল্ট ০)
- res := [2051, 0] (year, max_population)
- matrix-এর প্রতিটি (YOB, YOD) জোড়ার জন্য:
- year = YOB থেকে YOD-1 পর্যন্ত লুপ:
- d[year] += 1
- যদি d[year] >= res[1] হয়:
- যদি d[year] > res[1], তবে res := [year, d[year]]
- অন্যথায় res := [min(year, res[0]), res[1]]
- res[0] ফেরত দিন।
উদাহরণ
from collections import defaultdict
def solve(matrix):
d = defaultdict(int)
res = [2051, 0]
for YOB, YOD in matrix:
for year in range(YOB, YOD):
d[year] += 1
if d[year] >= res[1]:
if d[year] > res[1]:
res = [year, d[year]]
else:
res = [min(year, res[0]), res[1]]
return res[0]
matrix = [[1970,2010],[1960,2020],[1940,1970]]
print(solve(matrix))
ইনপুট
[[1970,2010],[1960,2020],[1940,1970]]
আউটপুট
1960