53. 最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组是数组中的一个连续部分。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]

输出:6

解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

示例 2:

输入:nums = [1]

输出:1

示例 3:

输入:nums = [5,4,-1,7,8]

输出:23

提示:

1 <= nums.length <= 105

-104 <= nums[i] <= 104

进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。

暴力法:

// 超出时间限制
// 203 / 210 个通过的测试用例
int maxSubArray(int* nums, int numsSize) {
int max = INT32_MIN;
for (int i = 0; i < numsSize; i++) { // 第一层for循环设置起始位置
int sum = 0;
for (int j = i; j < numsSize; j++) { // 第二层for循环遍历数组并寻找最大值
sum += nums[j];
max = max > sum ? max : sum;
}
}
return max;
}

贪心法:

// 正确解法
int maxSubArray(int* nums, int numsSize) {
int max = INT32_MIN;
int count = 0;
for (int i = 0; i < numsSize; i++) {
count += nums[i];
if (count > max)
max = count;
if (count < 0)
count = 0;
}
return max;
}
posted @   有空  阅读(8)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示