【LeetCode 53】Maximun Subarray(Python)
2018-01-12 17:33
417 查看
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
示例:given the array
the contiguous subarray
题目分析:找到一组数中连续的几个数所构成的最大和。网上说,这是一个典型的贪心算法的例子,因为我不太了解这个例子,所以,找了个讲解,在下面。
补充:当我在网上查找关于贪心算法的讲解时,还发现了另一种方法叫动态规划法。这两种方法差不多,目前来看都可以为这道题提供解题思路。 动态规划:点击打开链接
贪心算法:点击打开链接 贪心算法与动态规划的区别:点击打开链接
方法一:
思路:根据‘动态规划’和‘贪心算法’可以得出,解决此类问题的关键在于设置一个变量存放以当前元素为最长子数组的最后一个元素。用所能达到的最大和,以及之前所达到的最大和进行对比(这里是用到动态规划,需要理解与贪心算法的区别。动态规划可以保存之前的最大值)
思路:以下所写都是我在做题过程中想到的方法。首先判断正负,用第一个数和第二个数比较,如果第一个数>=第二个数,则两数相加,将得到的和存在一个变量中,与下一个数作比较。否则,从第二个数开始。 用到递归调用。
代码:
示例:given the array
[-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray
[4,-1,2,1]has the largest sum =
6.
题目分析:找到一组数中连续的几个数所构成的最大和。网上说,这是一个典型的贪心算法的例子,因为我不太了解这个例子,所以,找了个讲解,在下面。
补充:当我在网上查找关于贪心算法的讲解时,还发现了另一种方法叫动态规划法。这两种方法差不多,目前来看都可以为这道题提供解题思路。 动态规划:点击打开链接
贪心算法:点击打开链接 贪心算法与动态规划的区别:点击打开链接
方法一:
思路:根据‘动态规划’和‘贪心算法’可以得出,解决此类问题的关键在于设置一个变量存放以当前元素为最长子数组的最后一个元素。用所能达到的最大和,以及之前所达到的最大和进行对比(这里是用到动态规划,需要理解与贪心算法的区别。动态规划可以保存之前的最大值)
思路:以下所写都是我在做题过程中想到的方法。首先判断正负,用第一个数和第二个数比较,如果第一个数>=第二个数,则两数相加,将得到的和存在一个变量中,与下一个数作比较。否则,从第二个数开始。 用到递归调用。
代码:
class Solution(object): def maxSubArray(self, nums): if len(nums) == 0: return 0 curr_sum = nums[0] max_sum = nums[0] for i in range(1, len(nums)): curr_sum = max(nums[i], curr_sum + nums[i]) max_sum = max(max_sum, curr_sum) return max_sum
相关文章推荐
- LeetCode 53 — Maximum Subarray(C++ Java Python)
- LeetCode 96. Unique Binary Search Trees (Python)最优解--Apolo_Shane
- leetcode Combination Sum python
- leetcode @python 125. Valid Palindrome
- 81. Search in Rotated Sorted Array II Leetcode Python
- [LeetCode]题解(python):031-Next Permutation
- Leetcode 94. Binary Tree Inorder Traversal(python)
- [leetcode, python] Two Sum 两数之和等于某数
- [leetcode]Median of Two Sorted Arrays @ Python
- [Leetcode,python] Hamming Distance 汉明距离
- Leetcode 445 python
- 7. Reverse Integer Leetcode Python
- Leetcode 236 python
- leetcode解题笔记-word-ladder (python版)
- leetcode(3),Add Digits详解(python)
- leetcode 147. Insertion Sort List (Python版)
- leetcode_[Python/C++]_3_Longest Substring Without Repeating Characters(不重复子串最大长度)
- Leetcode 297 Python
- Leetcode 53. 最大子序和
- [LeetCode] 001. Two Sum (Medium) (C++/Java/Python)