1/连续子数组的最大值
最大子序和问题的原理主要基于动态规划。
动态规划是一种通过将问题分解为‘更小’的子问题并解决这些子问题来求解原始问题的算法。
在最大子序和问题中,我们可以定义一个状态数组,其中第i个元素表示以第i个数为结尾的最大子序列和。
然后我们通过迭代计算这个数组,每次将当前数与前面的最大子序列和相加,从而得到以当前数为结尾的最大子序列和。
具体来说,我们可以从数组的第一个元素开始,逐步计算以每个元素为结尾的最大子序列和。
在计算每个元素的最大子序列和时,我们将其与前一个元素的最大子序列和进行比较,选择其中较大的一个作为当前元素的最大子序列和。
通过这种方式,我们可以逐步得到整个数组的最大子序列和。
def f(list):
if len(list) == 0:
return 0
max_num = list[0] # 最大和
current_num = list[0] # 当前和,如果当前和为负数,就要从新开始计数,为啥呢?因为既然前面的和是负数了,那就不能算在内了,因为算在内,只能减小最大和,不能增加最大和。
for i in num[1:]:
current_num = max( i, current_num + i)
max_num = max( max_num, current_num)
return max_num
2/数组中的逆序对的个数 归并思想 分治, 先分,后治 排好序的数组,如果其中一个元素比后面的大,那么这个排好序的数组的全部元素都比另一个大。