当前位置: 首页 > article >正文

leetcode 53.Maximum Subarray

分治法

//lSum表示[left,right]内以left为左端点的最大子段和
//rSum表示[left,right]内以right为右端点的最大字段和
//iSum表示[left,right]的区间和
int divide_conquer(int* nums,int left,int right,int *lSum,int *rSum,int *iSum){int maxSum;//表示[left,right]内的最大字段和if(left == right){*lSum = nums[left];*rSum = nums[left];*iSum = nums[left];maxSum = nums[left];return maxSum;}int mid = (left+right)/2;int lSumL,rSumL,iSumL;int maxSumL = divide_conquer(nums,left,mid,&lSumL,&rSumL,&iSumL);int lSumR,rSumR,iSumR;int maxSumR = divide_conquer(nums,mid+1,right,&lSumR,&rSumR,&iSumR);*iSum = iSumL + iSumR;*lSum = lSumL > (iSumL + lSumR) ? lSumL:(iSumL + lSumR);*rSum = rSumR > (iSumR + rSumL) ? rSumR:(iSumR + rSumL);maxSum = maxSumL > maxSumR ? maxSumL: maxSumR;if(maxSum < rSumL+lSumR)maxSum = rSumL+lSumR;return maxSum;
}int maxSubArray(int* nums, int numsSize) {int lSum,rSum,iSum;return divide_conquer(nums,0,numsSize-1,&lSum,&rSum,&iSum);
}

动态规划

第一版

int maxSubArray(int* nums, int numsSize) {if(numsSize == 1)return nums[0];int *max_sub_sum = (int*)malloc(sizeof(int)*numsSize);max_sub_sum[0] = nums[0];int max_sum = nums[0];for(int i = 1;i < numsSize;i++){max_sub_sum[i] =  max_sub_sum[i-1] + nums[i] >= nums[i] ? max_sub_sum[i-1] + nums[i]:nums[i];if(max_sub_sum[i] > max_sum)max_sum = max_sub_sum[i];}free(max_sub_sum);return max_sum;
}

分析发现,numsSize等于1的情况不用单独考虑,后面的逻辑可以涵盖这种情况:

int maxSubArray(int* nums, int numsSize) {int *max_sub_sum = (int*)malloc(sizeof(int)*numsSize);max_sub_sum[0] = nums[0];int max_sum = nums[0];for(int i = 1;i < numsSize;i++){max_sub_sum[i] =  max_sub_sum[i-1] + nums[i] >= nums[i] ? max_sub_sum[i-1] + nums[i]:nums[i];if(max_sub_sum[i] > max_sum)max_sum = max_sub_sum[i];}free(max_sub_sum);return max_sum;
}

进一步分析,发现求max_sub_sum[i]的时候,只需要用到max_sub_sum[i-1],而不需要用到max_sub_sum数组i-1前面的元素,所以可以用一个pre_max_sub_sum取代max_sub_sum数组的作用,节省内存开销。

int maxSubArray(int* nums, int numsSize) {int pre_max_sub_sum = nums[0];int max_sum = nums[0];for(int i = 1;i < numsSize;i++){pre_max_sub_sum =  pre_max_sub_sum + nums[i] >= nums[i] ? pre_max_sub_sum + nums[i]:nums[i];if(pre_max_sub_sum > max_sum)max_sum = pre_max_sub_sum;}return max_sum;
}

相关文章:

leetcode 53.Maximum Subarray

分治法 //lSum表示[left,right]内以left为左端点的最大子段和 //rSum表示[left,right]内以right为右端点的最大字段和 //iSum表示[left,right]的区间和 int divide_conquer(int* nums,int left,int right,int *lSum,int *rSum,int *iSum){int maxSum;//表示[left,right]内的最…...

Mysql从入门到精通day5————子查询精讲

本文主要讲述子查询的几种方法&#xff0c;读者注意体会它们的不同场合的适用情况及功能&#xff0c;本篇文章也融入了小编实践过程遇到的坑&#xff0c;希望读者不要再踩坑 一.带IN关键字的子查询 in关键字可以检测结果集中是否存在某个特定的值&#xff0c;检测成功则执行外…...

虫洞数观系列二 | Python+MySQL高效封装:为pandas数据分析铺路

目录 系列文章 1. 引言 2. 常规写法mysql 3. 封装设计接口mysql 3.1dbname.py文件 3.1.1. 导入和基类定义 3.1.2. 具体表定义类 3.1.3. 表定义整合函数 3.1.4. 全局字典和测试代码 3.2mysql_dao文件 3.2.1. 模块导入与配置 3.2.2. 数据库连接池初始化 3.2.3. Comm…...

算法刷题-最近公共祖先-LCA

AcWing 1172 祖孙询问 一、题目描述 给定一棵包含 n 个节点的有根无向树&#xff0c;节点编号互不相同&#xff0c;但不一定是 1∼n。 有 m 个询问&#xff0c;每个询问给出了一对节点的编号 x 和 y&#xff0c;询问 x 与 y 的祖孙关系。 输入格式 第一行一个整数 n 表示节…...

MySQl之Binlog

前言 Binlog&#xff08;Binary Log&#xff09;是MySQL中至关重要的日志模块&#xff0c;它直接关系到数据恢复、主从复制等高阶架构设计。无论你是刚入门的新手还是有一定经验的开发者&#xff0c;掌握Binlog的原理和应用都是进阶的必经之路。 BinLog是什么&#xff1f; Bin…...

开源项目解读(https://github.com/zjunlp/DeepKE)

1.DeepKE 是一个开源的知识图谱抽取与构建工具&#xff0c;支持cnSchema、低资源、长篇章、多模态的知识抽取工具&#xff0c;可以基于PyTorch实现命名实体识别、关系抽取和属性抽取功能。同时为初学者提供了文档&#xff0c;在线演示, 论文, 演示文稿和海报。 2.下载对应的de…...

「MethodArgumentTypeMismatchException:前端传递 ‘undefined‘ 导致 Integer 类型转换失败」

遇到的问题&#xff1a; Failed to convert value of type java.lang.String to required type java.lang.Integer; nested exception is java.lang.NumberFormatException: For input string: "undefined" 原因分析&#xff1a; 大致意思就是我传递的参数到后端没…...

LabVIEW故障诊断数据处理方法

在LabVIEW故障诊断系统中&#xff0c;数据处理直接决定诊断的准确性和效率。工业现场常面临噪声干扰、数据量大、实时性要求高等挑战&#xff0c;需针对性地选择处理方法。本文结合电机故障诊断、轴承损伤检测等典型案例&#xff0c;详解数据预处理、特征提取、模式识别三大核心…...

基于 SpringBoot 的火车订票管理系统

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…...

Python的概论

免责声明 如有异议请在评论区友好交流&#xff0c;或者私信 内容纯属个人见解&#xff0c;仅供学习参考 如若从事非法行业请勿食用 如有雷同纯属巧合 版权问题请直接联系本人进行删改 前言 提示&#xff1a;&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c…...

构建大语言模型应用:句子转换器(Sentence Transformers)(第三部分)

本系列文章目录 简介数据准备句子转换器&#xff08;本文&#xff09;向量数据库搜索与检索大语言模型开源检索增强生成评估大语言模型服务高级检索增强生成 RAG 在之前的博客中&#xff0c;我们学习了为RAG&#xff08;检索增强生成&#xff0c;Retrieval Augmented Generati…...

怎样提升大语言模型(LLM)回答准确率

怎样提升大语言模型(LLM)回答准确率 目录 怎样提升大语言模型(LLM)回答准确率激励与规范类知识关联类情感与语境类逆向思维类:为什么不,反面案例群体智慧类明确指令类示例引导类思维引导类约束限制类反馈交互类:对话激励与规范类 给予奖励暗示:在提示词中暗示模型如果回…...

【进阶】vscode 中使用 cmake 编译调试 C++ 工程

基于 MSYS2 的 MinGW-w64 GCC 工具链与 CMake 构建系统&#xff0c;结合VSCode及其扩展插件&#xff08; ms-vscode.cmake-tools&#xff09;&#xff0c;可实现高效的全流程C开发调试。既可通过 VSCode 可视化界面&#xff08;命令面板、状态栏按钮&#xff09;便捷完成配置、…...

流影---开源网络流量分析平台(三)(管理引擎部署)

目录 前沿 功能介绍 部署过程 前沿 在上一篇文章中&#xff0c;最后因为虚拟机的资源而没看到最后的效果&#xff0c;而是查看了日志&#xff0c;虽然效果是有了&#xff0c;但后来我等了很久&#xff0c;还是那个转圈的画面&#xff0c;所以我猜测可能是少了什么东西&#…...

QT Quick(C++)跨平台应用程序项目实战教程 5 — 界面设计

目录 1.版面设计 2. 自定义按钮 2.1 自定义工具栏按钮 2.2 自定义图标按钮 3. 顶部工具栏 4. 主体 5. 底部工具栏 6. 主文件 7. 最终效果 上一章内容讲解了QML基本使用方法。本章内容继续延续“音乐播放器”项目主线&#xff0c;完成程序的界面设计任务。 1.版面设计…...

【微服务架构】SpringCloud Alibaba(三):负载均衡 LoadBalance

文章目录 SpringCloud Alibaba1、核心组件2、优势3、应用场景 一、Loadbalance介绍二、Ribbon和Loadbalance 对比三、整合LoadBlance1、升级版本2、移除ribbon依赖&#xff0c;增加loadBalance依赖 四、自定定义负载均衡器五、重试机制六、源码分析1、猜测源码的实现2、初始化过…...

关于音频采样率,比特,时间轴的理解

是的&#xff0c;你的理解完全正确&#xff01;-ar、-af aresampleasync1000 和 -b:a 64k 分别用于控制音频的采样率、时间戳调整和比特率。它们各自有不同的作用&#xff0c;但共同确保音频的质量和同步性。下面我将详细解释每个参数的作用和它们之间的关系。 1. -ar 参数 作用…...

06-02-自考数据结构(20331)- 查找技术-动态查找知识点

自考数据结构动态查找算法主要讲二叉树和平衡二叉树,但是感觉到了,就又续接了一部分,所以这篇备考的小伙伴着重看前两种就可以了。 知识拓扑 知识点介绍 二叉排序树(BST) 定义 二叉排序树(Binary Search Tree)又称二叉查找树,它或者是一棵空树,或者是具有下列性质的二…...

【Vue2插槽】

Vue2插槽 Vue2插槽默认插槽子组件代码&#xff08;Child.vue&#xff09;父组件代码&#xff08;Parent.vue&#xff09; 命名插槽子组件代码&#xff08;ChildNamed.vue&#xff09;父组件代码&#xff08;ParentNamed.vue&#xff09; 代码解释 Vue2插槽 Vue2插槽 下面为你详…...

Upload-labs 靶场搭建 及一句话木马的原理与运用

1、phpstudy及upload-labs下载 &#xff08;1&#xff09;下载phpstudy小皮面板 首先需要软件phpstudy 下载地址 phpStudy下载-phpStudy最新版下载V8.1.1.3 -阔思亮 &#xff08;2&#xff09;然后到github网址下载源码压缩包 网址 https://github.com/c0ny1/upload-labs 再…...

爬虫的第三天——爬动态网页

一、基本概念 动态网页是指网页内容可以根据用户的操作或者预设条件而实时发生变化的网页。 特点&#xff1a; 用户交互&#xff1a;动态网页能够根据用户的请求而生成不同的内容。内容动态生成&#xff1a;数据来自数据库、API或用户输入。客户端动态渲染&#xff1a;浏览器…...

vue状态管理器pinia、pinia-plugin-persist持久化储存

vue状态管理器pinia、pinia-plugin-persist持久化储存 一、简介二、配置状态管理器&#xff0c;需安装pinia、pinia-plugin-persist三、定义store&#xff1a;defineStore五、pinia中的Getter六、pinia中的Action七、pinia-plugin-persist持久化储存配置 一、简介 Pinia 是一个…...

为什么需要 Node.js 的 URL 处理工具?

关键问题&#xff1a;ES 模块与传统模块的路径差异 1. 传统 CommonJS 模块的做法 在传统的 Node.js 模块&#xff08;使用 require&#xff09;中&#xff0c;我们会这样获取当前文件所在目录的路径&#xff1a; javascript 复制 const path require(path); const dirPat…...

力扣HOT100之矩阵:48. 旋转图像

这道题本来想用剥洋葱的办法的&#xff0c;一直写不对&#xff0c;放弃了。。。直接去看题解&#xff0c;用剥洋葱其实也可以做&#xff0c;就是要从外层处理到内层&#xff0c;每一个边界上的元素为matrix[0].size() - 1个&#xff0c;这样一来&#xff0c;四条边界上的元素个…...

uniapp微信小程序获取用户手机号uniCloud云开发版

开发微信小程序&#xff0c;很多时候需要获取用户的手机号&#xff0c;这样方便平台更好的为用户服务&#xff0c;但是微信小程序不允许开发者直接获取用户的手机号&#xff0c;需要用户手动授权才能获取手机号&#xff0c;且需要配合后端进行解密才能获得完整的手机号&#xf…...

基于神经网络的文本分类的设计与实现

标题:基于神经网络的文本分类的设计与实现 内容:1.摘要 在信息爆炸的时代&#xff0c;大量文本数据的分类处理变得至关重要。本文旨在设计并实现一种基于神经网络的文本分类系统。通过构建合适的神经网络模型&#xff0c;采用公开的文本数据集进行训练和测试。在实验中&#x…...

31天Python入门——第18天:面向对象三大特性·封装继承多态

你好&#xff0c;我是安然无虞。 文章目录 面向对象三大特性1. 封装2. 继承3. 多态4. 抽象基类5. 补充练习 面向对象三大特性 面向对象编程&#xff08;Object-Oriented Programming, 简称OOP&#xff09;有三大特性, 分别是封装、继承和多态.这些特性是面向对象编程的基础, …...

第十六届蓝桥杯模拟二(串口通信)

由硬件框图可以知道我们要配置LED 和按键 一.LED 先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题 二.按键 按键配置,由原理图按键所对引脚要GPIO_Input 生成代码,在文件夹中添加code文件夹,code中添加fun.…...

22--交换安全与端口隔离完全指南:MAC地址的奇幻漂流

&#x1f310; 交换安全与端口隔离完全指南&#xff1a;MAC地址的奇幻漂流 &#x1f3a9; 引言&#xff1a;当数据包参加假面舞会 想象一下&#xff0c;网络世界正在举办盛大的假面舞会。每个设备都戴着MAC地址面具入场&#xff0c;交换机就是严格的安检员。本文将带你揭秘&…...

Redis和三大消息队列

一、中间件核心概念解析 1. Redis Redis是一种高性能的内存数据库&#xff0c;支持多种数据结构和持久化机制&#xff0c;常用于缓存、队列等场景。 &#xff08;1&#xff09;核心数据结构 数据结构特性与典型应用场景String存储文本、数值&#xff08;如计数器&#xff0…...