1.最笨的办法-穷举法
思路就是,取出所有可能的子数组,即找出所有可能的0≤i≤j≤n,然后求出数组从i到j的所有数的和再对比,这样的方法时间复杂度较高,python实现如下:
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n=len(nums);
ans = -100000000000;
for i in range(0,n):
for j in range(i,n):
sums =sum(nums[i:j+1]);
ans=max(ans,sums)
return ans
提示超时,最终执行的输入如下:
此时的时间复杂度为O(n^3)
2.第一次优化:
这一步求和的时候,每次没有必要从i到j完整求和,只要存储了上一次求和的结果,之后只要在前面求和的基础上继续累加就可以。
具体方法就是,把sums=0在j循环之前声明,j进行循环时,每次求和是在前一次求和的基础上再加上num[j]:
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n=len(nums);
ans = -100000000000;
for i in range(0,n):
sums = 0
for j in range(i,n):
sums += nums[j];
ans=max(ans,sums)
return ans
此时超时的结果为,有提升:
时间复杂度此时为O(n^2)
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABJMAAADHCAYAAACtIxJ2AAAgAElEQVR4AeydC1xVVdrw/4IcQEDlEoomhqF4yWvxajqaab1qfsY4pvM12sxITUM5Y3NR6zNtnPHyVlpTzthQU9g7ycyXZg76pTh5KUxHXkq8lIqSJF5Q5CJ3OHjw+629zz7nAAfOAcHAnu0Pz76s9axn/dfae6/97Gc9u8P169evI4sQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBBwg4CHG2kkiRAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAENAIiDFJOoIQEAJCQAgIASEgBISAEBACQkAICAEhIASEgNsExJjkNipJKASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgxiTpA0JACAgBISAEhIAQEAJCQAgIASEgBISAEBACbhMQY5LbqCShEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAYk6QPCAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAi4TUCMSW6jkoRCQAgIASEgBISAEBACQkAICAEhIASEgBAQAmJMkj4gBISAEBACQkAICAEhIASEgBAQAkJACAgBIeA2ATEmuY1KEgoBISAEhIAQEAJCQAgIASEgBISAEBACQkAIiDFJ+oAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgNsExJjkNipJKASEgBAQAkJACAgBISAEhIAQEAJCQAgIASHQURAIASEgBISAEGivBMrLyyktLUX9VlZWUl1djcViaa/Vadd6e3p64uXlhY+PD506dcLf31/7bdeVEuWFgBAQAkJACAgBISAEnBLocP369etOj8hOISAEhIAQEAJtkEBNTQ15eXkUFBSgbmGdO3fWjBbKiGEymVBGDVluPgFlxDObzZpRTxn3iouL6dChA0FBQYSEhODhIc7QN79VpEQhIASEgBAQAkJACLQOATEmtQ5XkSoEhIAQEAKtQCA3N5fLly/TpUsXgoOD8fPza4VSRGRLESgrKyM/P5+ioiK6detGaGhoS4kWOUJACAgBISAEhIAQEALfIgExJn2L8KVoISAEhIAQcI+A8nS5cOECHTt2pHv37vj6+rqXUVK1CQIVFRVcunSJa9eu0bNnT5n+1iZaRZQQAkJACAgBISAEhEDzCYgxqfnsJKcQEAJCQAjcBAKFhYWc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