简谈最大子数组和

来源:互联网 发布:淘宝做任务送礼物微信 编辑:程序博客网 时间:2024/05/17 22:45

1 最大子数组和问题

最大子数组肯定不会有一个负的子数组前缀
这里首先将前缀置为0

def fun(z):    if len(z) == 0:        return    tem_sum = 0    final_sum = -0x3fffffff    for i in range(len(z)):        if tem_sum + z[i] > final_sum:            final_sum = tem_sum + z[i]        if tem_sum + z[i] > 0:            tem_sum = tem_sum + z[i]        else:            tem_sum = 0    return final_sum
a = [1,2,3]
fun([-1,-2,-3])
-1
fun([0,1])
1

2返回最大字数组和以及这个子数组

1 如果之前的和加上当前的元素大于最大和,则更新final_sum,final_up,final_down
2 如果tem_sum + 当前元素 > 0,那么tem_sum更新为tem_sum + 当前元素,否则tem_sum = 0,down = 当前位置的下一个

def fun(z):    if len(z) == 0:        return    tem_sum = 0    final_sum = -0x3fffffff    up = 0    down = 0    final_up = 0    final_down = 0    for i in range(len(z)):        if tem_sum + z[i] > final_sum:            final_sum = tem_sum + z[i]            final_up = i            final_down = down            print final_sum,z[final_down:final_up+1]        if tem_sum + z[i] > 0:            tem_sum = tem_sum + z[i]        elif tem_sum + z[i] < 0:            tem_sum = 0            down = i + 1        elif tem_sum + z[i] == 0:            tem_sum = 0            down = i + 1     return final_sum,z[final_down:final_up+1]
fun([1,2,3])
1 [1]3 [1, 2]6 [1, 2, 3](6, [1, 2, 3])
fun([-1,-2,-3])
-1 [-1](-1, [-1])
fun([-1,0,1,0,2,-3])
-1 [-1]0 [0]1 [1]3 [1, 0, 2](3, [1, 0, 2])
fun([-1,0,0,1,2,3,-3])
-1 [-1]0 [0]1 [1]3 [1, 2]6 [1, 2, 3](6, [1, 2, 3])
fun([1,-1,2,3])
1 [1]2 [2]5 [2, 3](5, [2, 3])
fun([-3,-2,-1])
-3 [-3]-2 [-2]-1 [-1](-1, [-1])
b = 0a = bb = 1print a
0
[1,2,3][0:2]
[1, 2]
[1,2,3][0:3]
[1, 2, 3]
print -0x3fffffff
-1073741823
0 0
原创粉丝点击