博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode每天一题】Maximum Subarray(最大子数组)
阅读量:6300 次
发布时间:2019-06-22

本文共 1610 字,大约阅读时间需要 5 分钟。

Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

Example:        Input: [-2,1,-3,4,-1,2,1,-5,4],            Output: 6                 Explanation: [4,-1,2,1] has the largest sum = 6.

Follow up:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

思路


      这道题看到之后第一想到的就是使用动态规划来解决这个问题。使用动态规划需要申请一个辅助数组,另外还需要动态方程,方程为dp[i] = nums[i] + ( dp[i-1] if dp[i-1] > 0 else 0)。 这种解法的时间复杂度为O(n),空间复杂度为O(n)。

  第二种思路就是我们设置一个sum_标志量和结果变量,然后从头遍历,使用sum_变量存储连续数组的和,如果当前小于0直接赋值为0。最后返回结果变量。时间复杂度为O(n),空间复杂度为O(1)。

第一种思路代码


 

1 class Solution(object): 2     def maxSubArray(self, nums): 3         """ 4         :type nums: List[int] 5         :rtype: int 6         """ 7         if len(nums) < 1 : 8             return  0 9         dp = [0] * len(nums)     # 辅助数组10         dp[0] = nums[0]    # 记录nums第一个的值11         max_num = dp[0]     # 记录子数组最大的值12         for i in range(1, len(nums)):13             dp[i] = nums[i] + (dp[i-1] if dp[i-1]> 0 else 0)   # 记录当前最大的子数组和的值14             max_num = max(max_num, dp[i])      15         return max_num

第二种思路解决办法


 

1 class Solution(object): 2     def maxSubArray(self, nums): 3         """ 4         :type nums: List[int] 5         :rtype: int 6         """ 7         if len(nums) < 1 : 8             return  0 9         res, sum_ = nums[0], 010         for i in nums:       11             sum_ += i       12             res = max(sum_, res)13             if sum_ < 0:14                 sum_ = 015         return res

 

转载于:https://www.cnblogs.com/GoodRnne/p/10726043.html

你可能感兴趣的文章
中间件
查看>>
Android SharedPreferences
查看>>
css面试题
查看>>
Vue组建通信
查看>>
用CSS画一个带阴影的三角形
查看>>
前端Vue:函数式组件
查看>>
程鑫峰:1.26特朗.普力挺美元力挽狂澜,伦敦金行情分析
查看>>
safari下video标签无法播放视频的问题
查看>>
01 iOS中UISearchBar 如何更改背景颜色,如何去掉两条黑线
查看>>
对象的继承及对象相关内容探究
查看>>
Spring: IOC容器的实现
查看>>
Serverless五大优势,成本和规模不是最重要的,这点才是
查看>>
Nginx 极简入门教程!
查看>>
iOS BLE 开发小记[4] 如何实现 CoreBluetooth 后台运行模式
查看>>
Item 23 不要在代码中使用新的原生态类型(raw type)
查看>>
为网页添加留言功能
查看>>
JavaScript—数组(17)
查看>>
Android 密钥保护和 C/S 网络传输安全理论指南
查看>>
以太坊ERC20代币合约优化版
查看>>
Why I Began
查看>>