国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python如何求數組連續最大和的示例代碼

2020-02-15 21:25:23
字體:
來源:轉載
供稿:網友

題目描述:

一個有 n 個元素的數組,這 n 個元素既可以是正數也可以是負數,數組中連續的一個或多個元素可以組成一個連續的子數組,一個數組可能有多個這種連續的子數組,求子數組的最大值。例如,對于數組 [1,-2,4,8,-4,7,-1,-5] 而言,其最大和的子數組為 [4,8,-4,7],最大值為 15。

方法:

蠻力法 重復利用已經計算的子數組和 動態規劃 優化的動態規劃

1.蠻力法

找出所有的子數組,然后求出子數組的和,在所有子數組的和中取最大值。

代碼實現:

#!/usr/bin/env python3# -*- coding: utf-8 -*-# @Time  : 2020/1/29 21:59# @Author : buu# @Software: PyCharm# @Blog  :https://blog.csdn.net/weixin_44321080def maxSubArrSum(arr):  if arr == None or len(arr) <= 0:    print('參數不合理!')    return  thisSum = 0  maxSum = 0  i = 0  while i < len(arr):    j = i    while j < len(arr):# j 控制連續子數組包含的元素個數      thisSum = 0      k = i # k 表示連續子數組開始的下標      while k < j:        thisSum += arr[k]        k += 1      if thisSum > maxSum:        maxSum = thisSum      j += 1    i += 1  return maxSumif __name__ == '__main__':  arr = [1, -2, 4, 8, -4, 7, -1, -5]  print('1 max sub array sum:', maxSubArrSum(arr))

結果:


算法性能分析:
這種方法的時間復雜度為O(n3);

2.重復利用已經計算的子數組和

由于 sum[i,j] = sum[i,j-1] + arr[j],在計算 sum[i,j] 的時候可以使用前面已計算出的 sum[i,j-1] 而不需要重新計算,采用這種方法可以省去計算 sum[i,j-1] 的時間,從而提高效率。

代碼實現:

#!/usr/bin/env python3# -*- coding: utf-8 -*-# @Time  : 2020/1/30 10:53# @Author : buu# @Software: PyCharm# @Blog  :https://blog.csdn.net/weixin_44321080def maxSubArrSum(arr):  if arr == None or len(arr) <= 0:    print('參數不合理!')    return  maxSum = -2 ** 31  i = 0  while i < len(arr): # i: 0~7    sums = 0    j = i    while j < len(arr): # j: 0~7      sums += arr[j] # sums 重復利用      if sums > maxSum: # 每加一次就判斷一次        maxSum = sums      j += 1    i += 1  return maxSumif __name__ == '__main__':  arr = [1, -2, 4, 8, -4, 7, -1, -5]  print('2 max sub array sum:', maxSubArrSum(arr))

結果:


算法性能分析:
使用了雙重循環,時間復雜度為O(n2);

3.動態規劃

首先可以根據數組最后一個元素 arr[n-1] 與最大子數組的關系分為以下三種情況討論:
(包含或不包含,包含的話肯定以最后一個元素結尾;不包含的話,或者最后一個元素單獨構成最大子數組,或者轉換為求 arr[1…n-2] 的最大子數組)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南召县| 虎林市| 石河子市| 甘孜| 黎川县| 张掖市| 陇西县| 赫章县| 永吉县| 丽江市| 桃园县| 五指山市| 纳雍县| 辉南县| 白玉县| 龙游县| 盐亭县| 疏附县| 泰安市| 会昌县| 蒲江县| 吴忠市| 吉木萨尔县| 平江县| 隆昌县| 即墨市| 武山县| 勐海县| 栖霞市| 镇沅| 黑龙江省| 屯昌县| 南充市| 内江市| 青海省| 蒙阴县| 包头市| 鞍山市| 贡觉县| 沧源| 柘城县|