সমস্যা বিবরণ
একটি ধনাত্মক পূর্ণসংখ্যা N দেওয়া থাকলে, তার বাইনারি রিপ্রেজেন্টেশনে দুটি последовательviens ১-এর মধ্যে সর্বোচ্চ দূরত্ব খুঁজে বের করতে হবে। যদি দুটি последовательviens ১ না থাকে, তবে ০ রিটার্ন করুন।
উদাহরণ
ইনপুট: 22 → আউটপুট: 2
কারণ ২২-এর বাইনারি = 10110। এখানে তিনটি ১ আছে। প্রথম দুটি ১-এর মধ্যে দূরত্ব ২ (অবস্থান ০ এবং ২), দ্বিতীয় জোড়ার দূরত্ব ১ (অবস্থান ২ এবং ৩)। সর্বোচ্চ দূরত্ব = ২।
এলগরিদম
- N-এর বাইনারি বিটগুলো একটি লিস্টে সংরক্ষণ করুন (K)।
Max = 0,C = 0(প্রথম ১-এর ইনডেক্স),Flag = Falseদিয়ে আরম্ভ করুন।- K-এর প্রতিটি বিটের জন্য লুপ চালান:
- যদি বিটটি '১' হয় এবং
C == 0এবংFlag == False→C = i,Flag = True। - অন্যথায়, যদি বিটটি '১' হয় এবং
Flag == True→S = i,Max = max(Max, |S - C|), তারপরC = S।
- যদি বিটটি '১' হয় এবং
- শেষে
Maxরিটার্ন করুন।
পাইথন বাস্তবায়ন
class Solution:
def binaryGap(self, N):
B = bin(N).replace('0b', '')
K = list(B)
Max = 0
C = 0
S = 0
Flag = False
for i in range(len(K)):
if K[i] == '1' and C == 0 and Flag == False:
C = i
Flag = True
elif K[i] == '1' and Flag:
S = i
if Max < abs(S - C):
Max = abs(S - C)
C = S
return Max
ob = Solution()
print(ob.binaryGap(22)) # আউটপুট: 2
ইনপুট / আউটপুট
ইনপুট: 22 আউটপুট: 2