leetcode 53. 最大子数组和
题目:
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例2:
输入:nums = [1]
输出:1
代码实现:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
vector<int> sum(nums.size());//sum[i]记录以i下标作为结尾的连续子序列的和的最大值
sum[0] = nums[0];
for(int i = 1; i < nums.size(); i++)
{ //如果以第i-1个元素作为结尾的子序列的最大和小于等于0
//则以第i个元素作为结尾的子序列的最大和就是nums[i]本身
//因为加上一个小于等于0的数肯定比本身要小
if(sum[i-1] <= 0 )
sum[i] = nums[i];
else
{
//如果以第i-1个元素作为结尾的子序列的最大和大于0
//则以第i个元素作为结尾的子序列的最大和为sum[i-1]+nums[i]
//因为加上一个大于0的数肯定大于本身
sum[i] = sum[i-1] + nums[i];
}
}
//vector容器获取最大值
int max_num = *max_element(sum.begin(), sum.end()); //获取最大值
return max_num;
}
};
/*1.求数组的最大值或最小值
1)vector容器
vector<int> nums = {1,2,3,8,0,33,11,9};
int max_num = *max_element(nums.begin(), nums.end()); //获取最大值
int min_num = *min_element(nums.begin(), nums.end());//获取最小值
1
2
3
2)普通数组
int nums[8] = {1,2,3,8,0,33,11,9};
int max_num = *max_element(nums, nums + 8);
int min_num = *min_element(nums, nums + 8);
2.求数组最大值最小值对应的下标
1)vector容器
vector<int> nums = {1,2,3,8,0,33,11,9};
//获取最大值对应的下标
int max_num_index = max_element(nums.begin(), nums.end()) - nums.begin();
//获取最小值对应的下标
int min_num_index = min_element(nums.begin(), nums.end()) - nums.begin();
1
2
3
2)普通数组
int nums[8] = {1,2,3,8,0,33,11,9};
int max_num_index = max_element(nums, nums + 8) - nums;
int min_num_index = min_element(nums, nums + 8) - nums;
/*