不相邻元素正数数组最大和值

该博客介绍了一个寻找正数数组中不相邻元素最大和的问题,通过遍历数组并使用两个变量curMax和preMax来跟踪包含当前元素和包含前一个元素的最大和,最终得到最大子数组和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:给定一个正数数组,找到一个子数组满足条件:

      1)子数组选择的元素不能包含原数组相邻元素

      2)满足条件1的前提下,得到的子数组的和值最大

思路:遍历一次数组,设置两个变量:

包含当前元素的最大值 curMax

包含前一个元素的最大值preMax

在遍历过程过不断更新上述两个变量:

curMax = current +preMax'     (preMax'表示上一轮中的值)

preMax = max(preMax', curMax')

 

具体案例数据分析:List = [2, 3, 4, 1, 9, 3, 2, 3, 3, 4]  

(1)list[0] = 2      curMax = 2+ 0 = 2    preMax = max(0, 0 ) =0

(2) list[1] = 3       curMax = 3+0 = 3     preMax = max(2, 0) = 2

(3) list[2] = 4       curMax = 4 + 2 = 6   preMax = max(3, 2)  =3

(4) list[3] =  1      curMax = 1 +3 =4     preMax = max(6, 3) =6

(5) list[4] =  9      curMax = 9 +6 =15    preMax = max(4, 6)=6

(6) list[5] = 3   curMax = 3 +6= 9       preMax = max(15, 6) = 15

(7) list[6] =  2    curMax = 2+15 = 17     preMax = max(9, 15) = 15

(8)list[7] = 3      curMax = 3 + 15 = 18    preMax = max(17,15) = 17

(9) list[8] = 3    curMax = 3 +17 =20       preMax =max(18,17) =18

(10) list[9] = 4 curMax = 4 +18 =22        preMax =max(20,18) = 20

result = max(curMax, preMax) = (22, 20) = 22

 

代码实现:

def maxList(myList):
    length = len(myList)
    preMax = 0
    curMax = 0
    temp = 0
    for i in range(0, length):
        temp = myList[i] + preMax
        preMax = max(curMax, preMax)
        curMax = temp
    return max(curMax, preMax)

if __name__ == "__main__":
    myList = [2, 3, 4, 1, 9, 3, 2, 3, 3, 4] 
    print(maxList(myList)) # 22

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值