ধরুন আমাদের একটি ধনাত্মক পূর্ণসংখ্যা N আছে, N-এর বাইনারি উপস্থাপনায় আমাদের দুটি পরপর 1 এর মধ্যে সবচেয়ে দীর্ঘতম দূরত্ব খুঁজে বের করতে হবে। যদি কোনো দুই-পরপর 1 না থাকে, তাহলে 0 ফেরত দিন।
সুতরাং, যদি ইনপুট 22 এর মত হয়, তাহলে আউটপুট হবে 2, যেমন বাইনারিতে 22 হল 10110। 22-এর বাইনারি উপস্থাপনে তিনটি এবং 1 এর পরপর দুটি জোড়া রয়েছে। 1-এর প্রথম পরপর জোড়ার দূরত্ব 2, তারপর 1-এর দ্বিতীয় পরপর জোড়ার দূরত্ব 1। উত্তর হবে এই দুটি দূরত্বের মধ্যে সবচেয়ে বড়, যা হল 2।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- K :=N-এর বাইনারি উপস্থাপনার বিটের একটি তালিকা তৈরি করুন
- সর্বোচ্চ :=0, C :=0, S :=0
- পতাকা :=মিথ্যা
- আমি 0 থেকে K আকারের রেঞ্জের জন্য, কর
- যদি K[i] হয় '1' এবং C হয় 0 এবং পতাকা হয় False, তাহলে
- C:=i
- পতাকা :=সত্য
- অন্যথায় যখন K[i] হয় '1' এবং ফ্ল্যাগ, তখন
- S:=i
- যদি Max
- সর্বোচ্চ :=|S-C|
- C:=S
- যদি K[i] হয় '1' এবং C হয় 0 এবং পতাকা হয় False, তাহলে
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution:
def binaryGap(self, N):
B = bin(N).replace('0b','')
K = str(B)
K = list(K)
Max = 0
C = 0
S =0
Flag =False
for i in range(len(K)):
if K[i] is '1' and C is 0 and Flag is False:
C=i
Flag = True
elif K[i] is '1' and Flag:
S=i
if Max<abs(S-C):
Max = abs(S-C)
C=S
return Max
ob = Solution()
print(ob.binaryGap(22)) ইনপুট
22
আউটপুট
2