ধরুন আমাদের কাছে একটি বাইনারি তালিকা আছে যাকে nums বলা হয় যেখানে শুধুমাত্র 0s এবং 1s রয়েছে যেখানে একটি 0 ইঙ্গিত করে খালি ঘর এবং 1 নির্দেশ করে ঘরটি একটি বল দ্বারা পূর্ণ। আমাদের L এর একটি নতুন তালিকা খুঁজে বের করতে হবে, যার আকারও সংখ্যার আকারের মতো, যেখানে L[i] সমস্ত বলকে L[i] এ সরানোর জন্য প্রয়োজনীয় মোট দূরত্বে সেট করা হয়েছে। এখানে সূচক j থেকে সূচক i এ একটি বল সরানোর দূরত্ব হল |j - i|.
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[1, 1, 0, 1], তাহলে আউটপুট হবে [4, 3, 4, 5], কারণ
- L[0] =|0 - 0| + |1 - 0| + |3 - 0|
- L[1] =|0 - 1| + |1 - 1| + |3 - 1|
- L[2] =|0 - 2| + |1 - 2| + |3 - 2|
- L[3] =|0 - 3| + |1 - 3| + |3 - 3|
সুতরাং, সমস্ত বলকে L[1]-এ সরানোর জন্য আমাদের দূরত্ব 1 সহ সূচক 0 থেকে 1 বল এবং দূরত্ব 2 সহ সূচক 3 থেকে 1 বলকে সরাতে হবে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- সংখ্যা খালি হলে, তারপর
- একটি নতুন তালিকা ফেরত দিন
- left_count :=0
- right_count :=0
- left_sum :=0
- right_sum :=0
- ফলাফল :=একটি নতুন তালিকা
- প্রতিটি সূচক এবং মানের সংখ্যার জন্য, করুন
- যদি সংখ্যাটি অ-শূন্য হয়, তাহলে
- right_count :=right_count + 1
- right_sum :=right_sum + index
- যদি সংখ্যাটি অ-শূন্য হয়, তাহলে
- প্রতিটি সূচক এবং মানের সংখ্যার জন্য, করুন
- ফলের শেষে সন্নিবেশ (left_sum + right_sum)
- যদি সংখ্যাটি অ-শূন্য হয়, তাহলে
- right_count :=right_count - 1
- left_count :=left_count + 1
- left_sum :=left_sum + left_count
- right_sum :=right_sum - right_count
- ফলাফল
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(nums): if not nums: return [] left_count = right_count = 0 left_sum = right_sum = 0 result = [] for index, num in enumerate(nums): if num: right_count += 1 right_sum += index for index, num in enumerate(nums): result.append(left_sum + right_sum) if num: right_count -= 1 left_count += 1 left_sum += left_count right_sum -= right_count return result nums = [1, 1, 0, 1] print(solve(nums))
ইনপুট
[1, 1, 0, 1]
আউটপুট
[4, 3, 4, 5]