给定一组n个正整数。这是一个程序,用于查找给定数组的最大和子序列的总和,使得子序列中的整数按递增顺序排列。我正在尝试基于此YouTube video实现代码 我不知道我做错了什么。
class MaxIncreasingSumSubSequence(object):
def incsum(self,nums):
maxvalue = 0
sumlist = nums
for i in range(1,len(nums)):
for j in range(i):
if nums[j] < nums[i] and nums[i] + sumlist[j] > sumlist[i]:
sumlist[i] = nums[i] + sumlist[j]
maxvalue = max(sumlist)
print(maxvalue)
MaxIncreasingSumSubSequence().incsum([1, 101, 2, 3, 100, 4, 5])
答案 0 :(得分:1)
在Python中,当您执行list1 = list2
时,您不会获得两个列表。 list1
成为list2
的引用。基本上这两个变量引用相同的列表。
因此,将其更改为list1 = list2[:]
以将值从一个列表复制到另一个列表。以下应该有效:
def incsum(nums):
sumlist = nums[:]
for i in range(1,len(nums)):
for j in range(0,i):
if nums[j] < nums[i] and nums[i] + sumlist[j] > sumlist[i]:
sumlist[i] = nums[i] + sumlist[j]
print(max(sumlist))
incsum([1, 101, 2, 3, 100, 4, 5])
答案 1 :(得分:0)
def fun(a):
n=len(a)
list_sum=[a[0]]
max_val=a[0]
for i in range(1,n):
temp=a[i]
j=i-1
while j>-1:
if a[j]<a[i]:
if temp<a[i]+list_sum[j]:
temp=a[i]+list_sum[j]
if list_sum[j]==max_val:
break
j-=1
list_sum.append(temp)
if temp>max_val:
max_val=temp
return max_val
fun(array)