zoukankan      html  css  js  c++  java
  • 牛客网每日一练

     1 #
     2 # 
     3 # @param A int整型一维数组 
     4 # @return int整型
     5 #
     6 class Solution:
     7     def maxSubArray(self , A ):
     8         max_sim = A[0]
     9         sim = A[0]
    10         if not A :
    11             return None
    12         for n in A[1:]:
    13             if sim<0:
    14                 sim = n
    15             else:
    16                 sim += n
    17             max_sim = max(max_sim, sim)
    18         return max_sim
    19             
    20         # write code here
    请计算给出的数组(至少含有一个数字)中具有最大和的子数组(子数组要求在原数组中连续)
    例如:给出的数组为[−2,0,−3,4,−2,2,2,−5,4],
    子数组[−2,0,−3,4,−2,2,2,−5,4],具有最大的和:6.
     
    此题有两种解法
    1. 贪心思维,设arr[i]为以元素i结尾的子数组的最大和,那么arr[i] = max(arr[i-1]+nums[i], nums[i]),最大的arr[i]即是答案
    2. 分治思维,思路很简单,最大子数组和要么存在于左侧区间,要么存在于右侧区间,要么存在于跨越左右侧的区间

    因为此题分类为贪心算法类 所以我只用了贪心思维,其实贪心算法的时间复杂度为O(n),分治法的时间复杂度为O(nlogn)

  • 相关阅读:
    泛型
    a版本冲刺第四天
    a版本冲刺第三天
    a版本冲刺第二天
    a版本冲刺第一天
    第四次团队作业——系统设计
    团队项目——需求规格说明书
    第二次团队作业——预则立&&他山之石
    团队项目选题报告
    Alpha 冲刺4
  • 原文地址:https://www.cnblogs.com/nenu/p/14614716.html
Copyright © 2011-2022 走看看