寻找数字的最大交替和(Python 3)
我被要求写一个函数,找出一个给定数字中,按照一定长度的数字的最大交替和。比如,数字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代码