สมมติว่าเรามีจำนวนเต็มบวก N เราต้องหาระยะทางที่ยาวที่สุดระหว่าง 2 ตัวที่ติดกัน 1 ในการแทนค่าไบนารีของ N หากไม่มี 1 สองตัวติดต่อกัน ให้คืนค่า 0
ดังนั้น ถ้าอินพุตเท่ากับ 22 เอาต์พุตจะเป็น 2 เนื่องจาก 22 ในระบบไบนารีเท่ากับ 10110 มีสามตัวในการแทนค่าไบนารีของ 22 และ 1 คู่ติดต่อกันสองคู่ คู่ที่ 1 ติดต่อกันมีระยะทาง 2 จากนั้นคู่ที่ 2 ติดต่อกันมีระยะทาง 1 คำตอบจะมีระยะทางมากที่สุดในสองระยะทางนี้ ซึ่งก็คือ 2
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- K :=ทำรายการบิตของการแทนค่าไบนารีของ N
- สูงสุด :=0, C :=0, S :=0
- ตั้งค่าสถานะ :=เท็จ
- สำหรับฉันในช่วง 0 ถึงขนาด K ทำ
- ถ้า K[i] คือ '1' และ C คือ 0 และแฟล็กเป็นเท็จ ดังนั้น
- C:=ฉัน
- ตั้งค่าสถานะ :=จริง
- มิฉะนั้นเมื่อ K[i] เป็น '1' และแฟล็ก จากนั้น
- S:=ฉัน
- ถ้า Max
- สูงสุด :=|S-C|
- C:=ส
- ถ้า K[i] คือ '1' และ C คือ 0 และแฟล็กเป็นเท็จ ดังนั้น
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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