Kadane算法详解
一.什么是Kadane算法Kadane算法又名卡丹算法是一种高效解决最大子数组和问题的动态规划算法该算法以简单高效而出名二.算法核心思想通过迭代数组的每个元素维护两个变量来跟踪局部最优解和全局最优解当遍历到数组某个元素时最大的子数组和只有两种情况一种是以当前元素结尾一种是以当前元素开头的新数组。简单来说我们需要判断的是当前元素是加入前面的数组得到的子数组和更大还是以当前元素开头的新子数组和更大三.算法实现我们使用两个变量一个是当前子数组和一个是全局最大的子数组和。每遍历到一个元素时我们都判断当前元素当前子数组和与当前元素谁更大。再用更大的值和全局最大子数组和比较。只需要遍历数组一次就可以找到最大的子数组和递推公式maxcurNum (maxcurNumarr[i],arr[i]);maxNum (maxNum,maxcurNum);图解代码实现int maxSubArray(int* nums) { int maxcurNum nums[0]; int maxNum nums[0]; for (int i 1; i nums.size(); i) { maxcurNum max(maxcurNum nums[i], nums[i]); maxNum max(maxNum, maxcurNum); } return maxNum; }效率分析时间复杂度O(n)其中 n 为 nums 数组的长度。我们只需要遍历一遍数组即可求得答案。空间复杂度O(1)。我们只需要常数空间存放若干变量。四.真题练习洛谷1115最大子字段和题目链接P1115 最大子段和 - 洛谷题目描述给出一个长度为 n 的序列 a选出其中连续且非空的一段使得这段和最大。输入格式第一行是一个整数表示序列的长度 n。第二行有 n 个整数第 i 个整数表示序列的第 i 个数字 ai​。输出格式输出一行一个整数表示答案。输入输出样例输入 7 2 -4 3 -1 2 -4 3输出 4思路分析和例题一样套用模板即可注意题目数据大小需要用long long类型存储#includeiostream #includevector #includelimits.h using namespace std; int main() { int n; cin n; vectorintvec(n); for (int i 0;i n;i) { cin vec[i]; } long long sum vec[0];//记录当前子数组和 long long maxx vec[0];//记录全局最大子数组 for (int i 1;i n;i) { sum max(sum (long long)vec[i], (long long)vec[i]); maxx max(sum, maxx); } cout maxx; return 0; }信息学奥赛一本通1224最大子矩阵题目链接信息学奥赛一本通C版在线评测系统题目描述已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵你的任务是找到最大的非空(大小至少是1×1)子矩阵。【输入】输入是一个N×N的矩阵。输入的第一行给出N(0N100)。再后面的若干行中依次(首先从左到右给出第一行的N个整数再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[−127,127]。【输出】输出最大子矩阵的大小。【输入样例】4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2【输出样例】15思路分析由于这题是一个二维数组我们需要将二维数组先压缩成一维数组再通过Kadane算法找最大子数组和我们可以创建一个一维数组将二维数组第i列的数加到一维数组的i个元素中这样就可以达到压缩的效果压缩后得到的一维数组就继续使用Kadane算法即可得到最大子数组和当全部情况遍历结束后全局最大的子数组和就是最大子矩阵和#includeiostream #includevector #includelimits.h using namespace std; int main() { //输入数据 int n; cin n; vectorvectorintvec(n,vectorint(n)); for (int i 0;i n;i) { for (int j 0;j n;j) { cin vec[i][j]; } } //处理数据 int sum INT_MIN; for (int i 0;i n;i) { //记录每列元素和 vectorintans(n); //从第i行开始 for (int j i;j n;j) { //累加每行的元素,并在每次加完一行就进行一次计算 for (int k 0;k n;k) { ans[k] vec[j][k]; } //Kadane算法 int cur 0; for (int z 0;z n;z) { cur max(ans[z] cur, ans[z]); sum max(sum, cur); } } } //输出全局最大的子数组和 cout sum; return 0; }

相关新闻

python_django微信小程序的社区团购系统

python_django微信小程序的社区团购系统

文章目录 社区团购系统概述核心功能模块技术实现要点应用场景与优势 系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 社区团购系统概述 基于Python Django框架与微信小程序的社区团购系统&#x…

2026/7/3 15:01:31 阅读更多 →
前后端分离项目多环境配置完整笔记

前后端分离项目多环境配置完整笔记

总体目标 为了让项目在 开发环境(dev) 和 生产环境(prod) 都能灵活切换配置,我们将: 后端 Django 使用 .env.dev / .env.prod 前端 Vue 使用 .env.development / .env.production 所有环境差异都通过 .env 控制 代码中不再写死任何 IP、域名、密码、端口 这样项目结…

2026/7/5 14:29:39 阅读更多 →
工作记忆在AI原生游戏NPC中的革命性应用

工作记忆在AI原生游戏NPC中的革命性应用

工作记忆在AI原生游戏NPC中的革命性应用 关键词:工作记忆、AI原生NPC、游戏AI、认知建模、动态交互、情感计算、记忆系统 摘要:本文将揭开“工作记忆”如何为游戏NPC注入“人性灵魂”的技术密码。我们将从认知科学的底层逻辑出发,结合AI技术的…

2026/7/3 11:20:16 阅读更多 →

最新新闻

Thrift接口测试与性能分析:Team IDE的高级功能详解

Thrift接口测试与性能分析:Team IDE的高级功能详解

Thrift接口测试与性能分析:Team IDE的高级功能详解 【免费下载链接】teamide Team IDE 集成MySql、Oracle、金仓、达梦、神通等数据库、SSH、FTP、Redis、Zookeeper、Kafka、Elasticsearch、Mongodb、小工具等管理工具 项目地址: https://gitcode.com/gh_mirrors/…

2026/7/5 17:01:06 阅读更多 →
BTTV安卓版性能优化指南:提升应用流畅度的10个技巧

BTTV安卓版性能优化指南:提升应用流畅度的10个技巧

BTTV安卓版性能优化指南:提升应用流畅度的10个技巧 【免费下载链接】bttv A mod of the Twitch Android Mobile App adding BetterTTV, FrankerFaceZ and 7TV emotes 项目地址: https://gitcode.com/gh_mirrors/bt/bttv BTTV安卓版是一款为Twitch移动应用添加…

2026/7/5 16:59:06 阅读更多 →
如何贡献cs-wiki:开发者参与开源项目的详细步骤与技巧

如何贡献cs-wiki:开发者参与开源项目的详细步骤与技巧

如何贡献cs-wiki:开发者参与开源项目的详细步骤与技巧 【免费下载链接】cs-wiki 📙 致力打造完善的后端知识体系. Not only an Interview-Guide, but also a Learning-Direction. 项目地址: https://gitcode.com/gh_mirrors/cs/cs-wiki cs-wiki 是…

2026/7/5 16:59:06 阅读更多 →
Twitter API Client实战:构建自动化Twitter机器人全攻略

Twitter API Client实战:构建自动化Twitter机器人全攻略

Twitter API Client实战:构建自动化Twitter机器人全攻略 【免费下载链接】twitter-api-client A user-friendly Node.js / JavaScript client library for interacting with the Twitter API. 项目地址: https://gitcode.com/gh_mirrors/twi/twitter-api-client …

2026/7/5 16:55:06 阅读更多 →
HyperDB入门指南:5分钟快速上手分布式数据库

HyperDB入门指南:5分钟快速上手分布式数据库

HyperDB入门指南:5分钟快速上手分布式数据库 【免费下载链接】hyperdb Distributed scalable database 项目地址: https://gitcode.com/gh_mirrors/hyp/hyperdb HyperDB是一款分布式可扩展数据库,它以文件系统的隐喻构建,让开发者能够…

2026/7/5 16:53:05 阅读更多 →
【Bug已解决】Codex CLI 报错 EMFILE: too many open files 解决方案

【Bug已解决】Codex CLI 报错 EMFILE: too many open files 解决方案

【Bug已解决】Codex CLI 报错 EMFILE: too many open files 解决方案 1. 问题描述 让 Codex 处理一个规模较大的项目(比如文件数量众多的 monorepo)时,任务执行到某个阶段突然崩溃,报出文件描述符耗尽的错误: Error: E…

2026/7/5 16:53:05 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻