寻找数字的最大交替和(Python 3)

4 投票
1 回答
1421 浏览
提问于 2025-04-17 22:18

我被要求写一个函数,找出一个给定数字中,按照一定长度的数字的最大交替和。比如,数字81010有3个长度为3的交替和,分别是(8-1+0)、(1-0+1)和(0-1+0),我们需要返回的结果是7。

虽然可以简单地计算每个数字子序列的和,但这样做可能会花费很多时间,而且算法需要足够快,以处理非常大的数字。我不知道怎么写一个比简单方法更快的函数……

我有一个提示,提示我考虑如何通过已知前n个数字的和,来有效地找到从第二个数字开始的数字和。

请帮帮我,谢谢。

附注:我看到过一些关于寻找最大和的问题,但没能成功实现找到最大交替和的答案。

这是用来找出连续数字最大和的代码:

def max_sum(n,d):
    number = list(map(int,str(n)))
    maximum = current = sum(number[:d])
    for i in range(0, len(number)-d):
        current = current - number[i] + number[i+d]
        if current > maximum: 
           maximum = current
    return maximum

1 个回答

2
1. Negate every even number (81010 -> 8 -1 0 -1 0), find biggest_sum_1 starting at an odd position
2. Negate every odd number (81010 -> -8 1 0 1 0), find biggest_sum_2 starting at an even position
3. Return max(biggest_sum_1, biggest_sum_2)
def max_alt_sum(n,d):
  number = list(map(int,str(n)))
  negatedEven = []
  negatedOdd = []
  for i,v in enumerate(number):
    if i%2==0:
      negatedOdd.append(v)
      negatedEven.append(-v)
    else:
      negatedOdd.append(-v)
      negatedEven.append(v)
  maximum = sum(negatedEven[:d])
  for i in range(0, len(str(n))-d+1):
    if i%2==0:
      current = sum(negatedOdd[i:i+d])
    else:
      current = sum(negatedEven[i:i+d])
    if current > maximum:
      maximum = current
  return maximum

你问的是算法,所以这个问题应该转到理论计算机科学的网站上。

编辑:添加了Python代码

撰写回答