如何改善此编码挑战问题

问题描述 投票:-1回答:1

[在申请暑期实习时遇到了这个编码挑战,但没有被选入下一轮,我很好奇是否可以改善。

问题说:

给出负二进制数(-2)的数字除以2。

例如:

给出[1、0、0、1、1、1](-23),输出为[1、0、1、0、1、1](-11)

给出[0,1,1,1](-12),输出为[0,1,1,1](-6)

从左到右读取数组。 [1、0、0、1、1、1] = 1 *(-2)^ 0 + 0 *(-2)^ 1 + 0 *(-2)^ 2 + 1 *(-2)^ 3 + 1 *(-2)^ 4 +1 *(-2)^ 5 = 1 + 0 + 0 +(-8)+ 16 +(-32)= -23

我发现的最简单的解决方案是将数字转换为整数,将其除以二,然后将其转换回负二进制数。

感谢您的输入。

我在python中的代码:

import math


def solution(A):
    value = math.ceil(calculate_number(A) / 2)
    p = convert_number_to_binary(value)
    return p


# This function calculates de value of the array
def calculate_number(A):
    total = 0
    for i in range(0, len(A)):
        total += A[i] * (-2) ** i
    return total


def convert_number_to_binary(number):
    binary = []
    if number == 0:
        return binary

    while number != 0:
        number, remainder = divmod(number, -2)
        if remainder < 0:
            number += 1
            remainder -= -2
        binary.append(remainder)
    return binary

"""

python python-3.x binary jobs
1个回答
0
投票

考虑1230 // 10 = 123和1234 // 10 = 123,这意味着您将只修整最后一位数字,您可以尝试对二进制使用相同的概念(二进制以2为底,您要除以2),将能够减少您所做的所有计算,这种方法将更快得多,因为您不需要计算任何东西,而只是忽略了最后一位。

© www.soinside.com 2019 - 2024. All rights reserved.