ধরুন আমাদের একটি ধনাত্মক পূর্ণসংখ্যা 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