前言
本文将围绕【最大子数组和】问题展开讨论。
对于这一问题将采用多种思路方法来解决
【循环暴搜】【贪心】【动态规划】【分治】
一、如何理解【最大子数组和】?
题目链接: [点击跳转] Leetcode 53. 最大子数组和
题目如下:
这是一道经典的数组题,可以尝试多种方法来解决。
二、方法一(循环暴搜)
(方法一时间复杂度高易超时,也可从方法二开始浏览)
在读过题之后,我们很容易就会想到:
既然是找子数组,那么我们就可以做一个嵌套循环,一个双层的循环就可以表示任意一个含两个元素的子数组了。
就像这样:
for(int i=0;i<size;i++){
for(int j=i+1;j<size;j++){
}
}//(一个指向子数组开头,一个指向子数组末尾)
在这个嵌套循环进行的过程中,将元素累加起来,并记录下最大的子数组。
最后在找一遍单个元素的子数组,取最大,就OK啦!
代码如下:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int sum=0;//子数组和
int size=nums.size();//数组大小
int maxsum=INT_MIN;//表示最大子数组
//判断两个及以上的相邻元素
for(int i=0;i<size;i++){
sum+=nums[i];
for(int j=i+1;j<size;j++){
sum+=nums[j]</