Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

776
Views
Python: encuentre la brecha binaria más larga en la representación binaria de un número entero

Me gustaría saber si mi implementación es eficiente. He tratado de encontrar la solución más simple y menos compleja para ese problema usando python.

 def count_gap(x): """ Perform Find the longest sequence of zeros between ones "gap" in binary representation of an integer Parameters ---------- x : int input integer value Returns ---------- max_gap : int the maximum gap length """ try: # Convert int to binary b = "{0:b}".format(x) # Iterate from right to lift # Start detecting gaps after fist "one" for i,j in enumerate(b[::-1]): if int(j) == 1: max_gap = max([len(i) for i in b[::-1][i:].split('1') if i]) break except ValueError: print("Oops! no gap found") max_gap = 0 return max_gap

Déjame saber tu opinión.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Me doy cuenta de que la brevedad no significa legibilidad ni eficiencia.

Sin embargo, la capacidad de deletrear la solución en lenguaje hablado e implementarla en Python en poco tiempo constituye un uso eficiente de mi tiempo.

Para la brecha binaria: hey, vamos a convertir int en binario, eliminar los ceros finales, dividir en '1' para listar, luego encontrar el elemento más largo en la lista y obtener la longitud de este elemento.

 def binary_gap(N): return len(max(format(N, 'b').strip('0').split('1')))
over 4 years ago · Santiago Trujillo Report

0

Su implementación convierte el número entero en una cadena de base dos y luego visita cada carácter de la cadena. En su lugar, podría simplemente visitar cada bit en el entero usando << y & . Si lo hace, evitará visitar cada bit dos veces (primero para convertirlo en una cadena, luego para verificar si es un "1" o no en la cadena resultante). También evitará asignar memoria para la cadena y luego para cada subcadena que inspeccione.

Puede inspeccionar cada bit del entero visitando 1 << 0, 1 << 1, ..., 1 << (x.bit_length).

Por ejemplo:

 def max_gap(x): max_gap_length = 0 current_gap_length = 0 for i in range(x.bit_length()): if x & (1 << i): # Set, any gap is over. if current_gap_length > max_gap_length: max_gap_length = current_gap_length current_gap_length = 0 else: # Not set, the gap widens. current_gap_length += 1 # Gap might end at the end. if current_gap_length > max_gap_length: max_gap_length = current_gap_length return max_gap_length
over 4 years ago · Santiago Trujillo Report

0

def max_gap(N): xs = bin(N)[2:].strip('0').split('1') return max([len(x) for x in xs])

Explicación:

  1. Tanto los ceros iniciales como los finales son redundantes con la búsqueda de espacios binarios, ya que no están limitados por dos 1 (izquierda y derecha, respectivamente)
  2. Entonces, el paso 1 separa los ceros a la izquierda y a la derecha
  3. Luego, dividir por 1 produce todas las secuencias de 0'z
  4. Solución: la longitud máxima de las subcadenas de 0
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!