মনে করুন nums নামক একটি অ্যারে এবং অন্য একটি মান k আছে। আমরা ইনডেক্স ০-এ আছি। এক মুভে আমরা høj丽 হইতে høj丽 ডানে k ধাপ জাম্প করতে পারি অ্যারির বাউন্ডের বাইরে যাবে না। আমরা অ্যারির শেষ ইনডেক্সে পৌঁছাতে চাই। জাম্প করার জন্য স্কোর मिलে, যা হলো আমরা যেসব ইনডেক্স j ভিজিট করেছি সেগুলোর nums[j] যোগফল। সর্বোচ্চ স্কোর বের করতে হবে।
যেমন, ইনপুট nums = [1,-2,-5,7,-6,4], k = 2 হলে, আউটপুট হবে ১০ কারণ, আমরা এই সিকোয়েন্সে জাম্প করি [1, -2, 7, 4], তাহলে সর্বোচ্চ পয়েন্ট পাই, যা ১০।
সমাধান পদ্ধতি
এই সমস্যাটি সমাধান করতে নিচের ধাপগুলো অনুসরণ করুন:
- n := nums-এর সাইজ
- scores := 0 দিয়ে n সাইজের একটি অ্যারে
- scores[0] := nums[0]
- currMax := scores[0], max_pt := 0
- যদি n < 1 হয়, তবে
- 0 রিটার্ন করুন
- যদি n == 1 হয়, তবে
- nums-এর শেষ এলিমেন্ট রিটার্ন করুন
- idx = 1 থেকে n-1 পর্যন্ত
- যদি max_pt >= idx - k হয়, তবে
- যদি currMax < scores[idx-1] এবং idx > 0 হয়, তবে
- currMax := scores[idx-1], max_pt := idx-1
- যদি currMax < scores[idx-1] এবং idx > 0 হয়, তবে
- অন্যথায়,
- যদি idx - k > 0 হয়, তবে
- currMax := scores[idx-k], max_pt := idx - k
- p = idx-k থেকে idx-1 পর্যন্ত
- যদি scores[p] >= currMax হয়, তবে
- max_pt := p, currMax := scores[p]
- যদি scores[p] >= currMax হয়, তবে
- যদি idx - k > 0 হয়, তবে
- scores[idx] := currMax + nums[idx]
- যদি max_pt >= idx - k হয়, তবে
- scores[-1] := currMax + nums[-1]
- scores[-1] রিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন আরও ভালো বোঝার জন্য:
def solve(nums, k): n = len(nums) scores = [0] * n scores[0] = nums[0] currMax = scores[0] max_pt = 0 if n < 1: return 0 if n == 1: return nums[-1] for idx in range(1,n): if max_pt >= idx - k: if currMax < scores[idx-1] and idx > 0: currMax = scores[idx-1] max_pt = idx-1 else: if idx - k > 0: currMax = scores[idx-k] max_pt = idx - k for p in range(idx-k, idx): if scores[p] >= currMax: max_pt = p currMax = scores[p] scores[idx] = currMax + nums[idx] scores[-1] = currMax + nums[-1] return scores[-1] nums = [1,-2,-5,7,-6,4] k = 2 print(solve(nums, k))
ইনপুট
[1,-2,-5,7,-6,4], 2
আউটপুট
10