53.Maximum Subarray

    /** 53.Maximum Subarray * 2016-5-7 by Mingyang * 如果我们从头遍历这个数组。对于数组中的其中一个元素,它只有两个选择: 1.* 要么加入之前的数组加和之中(跟别人一组) * 2. 要么自己单立一个数组(自己单开一组)* 所以对于这个元素应该如何选择,就看他能对哪个组的贡献大。如果跟别人一组* 能让总加和变大,还是跟别人一组好了;如果自己起个头一组,自己的值比之前加和的值还要大,那么还是自己单开一组好了。* 所以利用一个dp数组,记录每一轮sum的最大值,dp[i]表示当前这个元素是跟之前数组加和一组还是自己单立一组好,然后维护一个全局最大值即位答案* 那么这道题目开始想能不能用maxSubArray(int A[], int i, int j), which means the maxSubArray for A[i: j].* 但是这么写子函数就很难找到这种关系。那么我们接下来就怎么做呢?* maxSubArray(int A[], int i), which means the maxSubArray for A[0:i ] which must has A[i] as the end element.* 那么就下来的关系就是:* dp[i] = Math.max(A[i], dp[i - 1] + A[i]);* 也就是说对于A[i]到底加不加进来,我们只需要看这个加进来大还是单独大。* 因为你如果加进来都比单独大,那么后面还是一个增量。* 千万不要写成:dp[i] = Math.max(dp[i-1], dp[i - 1] + A[i]);
* Kadan's algorithm O(n) time and O(1) space
*/public static int maxSubArray(int[] A) {int[] dp = new int[A.length];int max = A[0];dp[0] = A[0];for (int i = 1; i < A.length; i++) {dp[i] = Math.max(A[i], dp[i - 1] + A[i]);
// 这里只比较了自己另外开一个,和原来的加一起开的区别max = Math.max(max, dp[i]);}
//不是每一个dp都是返回最后一个dp值哦!有可能返回全局变量
return max;}/** 下面是我自己的解法,开始想的有点复杂,然后后面仔细列举一下也是蛮简单的,这里用了一个dp数组* dp[i]表示包括i在内的连续数组的最大值,而不是到i最优的结果* [-1,-2]那么dp[1]=-3,因为要把-2包括进来* 那么如果每个数自己就很大,比加起前面累积的dp还大,那么久自成一家* 否则的话需要加起来,每次更新dp的时候与全局变量max比较一下*/public int maxSubArray1(int[] nums) {int len=nums.length;int max=nums[0];int[] dp=new int[len];dp[0]=nums[0];for(int i=1;i<len;i++){if(nums[i]>nums[i]+dp[i-1]){dp[i]=nums[i];max=Math.max(max,dp[i]);}else{dp[i]=dp[i-1]+nums[i];max=Math.max(max,dp[i]);}}return max;}

 

转载于:https://www.cnblogs.com/zmyvszk/p/5469683.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 创建者设计模式_Java设计模式之创建者模式分享热爱编程,程序人生

PS:今天的23中设计模式中的创建者方式&#xff0c;至此告一段落。我今天带来的技术分享为创建者模式以及原型模式。当然在Java中这两种方式很常见&#xff0c;只不过我们写的次数确实有点低而已&#xff0c;但是这不是我不学它的借口&#xff01;&#xff01;&#xff01;创建者…

一文读懂电感器的原理、结构、作用及分类

电感器是能够把电能转化为磁能而存储起来的元件。电感器的结构类似于变压器&#xff0c;但只有一个绕组。电感器具有一定的电感&#xff0c;它只阻碍电流的变化。 如果电感器在没有电流通过的状态下&#xff0c;电路接通时它将试图阻碍电流流过它&#xff1b;如果电感器在有电流…

final关键字与static对比

final关键字与static对比 static关键字修饰变量时&#xff0c;会使该变量在类加载时就会被初始化&#xff0c;不会因为对象的创建再次被加载&#xff0c;当变量被static 修饰时就代表该变量只会被初始化一次 例如图中所示&#xff0c;被static修饰的变量j&#xff0c;虽然创建…

juce中的BailOutChecker

界面库中值得注意的一点就是对象响应事件的时候自身被删除了&#xff0c;那么后续的访问自然就会出问题&#xff0c;所以需要在响应事件之后先添加引用&#xff0c;相关处理之后再查看自身是否已经被删除&#xff0c;如果已经被删除那么就直接退出。juce中通过BailOutChecker来…

java quartz 跳过_Java Quartz计划作业-禁止同时执行作业

我正在使用Quartz Job执行特定任务。我也在我的Main应用程序类中安排它的执行&#xff0c;而我试图完成的工作是不允许同时执行此作业的实例。因此&#xff0c;调度程序仅应在其先前实例完成后才执行作业。这是我的工作班级&#xff1a;public class MainJob implements Job {s…

mac USB串口工具配置

安装USB serial 驱动 我的usb serial芯片是 pl2303, 先到官网上下载对应驱动&#xff0c;并安装。安装完成之后会要求重启。 http://www.prolific.com.tw/admin/Technology/GetFile.ashx?fileID238 安装 minicom https://alioth.debian.org/projects/minicom/ 下载源码&…

macpro生成公钥并查看公钥

打开macpro的终端输入以下命令&#xff1a; $ cd ~/.ssh $ ls 此时发现没有那个id_rsa.pub文件&#xff0c;没有&#xff0c;就需要创建公钥 用ssh-keygen创建公钥 此时已经有了

java join 源码_join on 和where 一起使用的细节

left join :左连接&#xff0c;返回左表中所有的记录以及右表中连接字段相等的记录。right join :右连接&#xff0c;返回右表中所有的记录以及左表中连接字段相等的记录。inner join: 内连接&#xff0c;又叫等值连接&#xff0c;只返回两个表中连接字段相等的行。full join:外…

SSIS 学习之旅 FTP访问类

这章把脚本任务访问FTP的方法 全部给大家。 控件的使用大家如果有不懂得可以看下我之前的文章。第一章&#xff1a;SSIS 学习之旅 第一个SSIS 示例&#xff08;一&#xff09;&#xff08;上&#xff09; 第二章&#xff1a;SSIS 学习之旅 第一个SSIS 示例&#xff08;二&#…

Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient

http 连接池能提升性能 http 的背景原理 a. 两台服务器建立 http 连接的过程是很复杂的一个过程&#xff0c;涉及到多个数据包的交换&#xff0c;并且也很耗时间。 b. Http 连接需要的 3 次握手 4 次分手开销很大&#xff0c;这一开销对于大量的比较小的 http 消息来说更大。…

Java容器坐标起点_Java的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点...

【单选题】【单选题】【单选题】class A{ int x1; void func1(int x1){ this.x1 x1; } } 关于上述程序,说法错误的是( )【单选题】浏览器的作用是( )。【判断题】构建大学生心理危机预警及干预工作机制,更好地帮助有严重心理问题的学生度过心理难关,及早预防、及时疏导、有效干…

自媒体工具:文本内容转音频文件实用小工具

目录 ​编辑 1、软件介绍 2、软件技术框架 3、使用说明 4、核心代码文件 5、注意事项 1、软件介绍 文本内容转转音频文件小工具&#xff0c;采用C#编程语言&#xff0c;基于Framework4.5开发&#xff0c;主要采用百度语音识别SDK&#xff0c;实现了在线文本内容转音频文件的功能…

IDEA 创建 SpringCloud项目-多项目方式

SpringCloud 虽然可以用多模块化的方式来创建&#xff0c;但是&#xff0c;SpirngCloud本身就是为分布式而准备的&#xff0c;如果使用多模块的话&#xff0c;那就是一个项目&#xff0c;偏离了分布式的概念。所以工程上还是常用多项目的方式&#xff0c;这样才可以分开布署各个…

php位运算重要吗,PHP位运算的用途

下面为大家带来一篇PHP位运算的用途。现在就分享给大家&#xff0c;也给大家做个参考。一起过来看看吧在实际应用中可以做用户权限的应用我这里说到的权限管理办法是一个普遍采用的方法&#xff0c;主要是使用到”位运行符”操作&#xff0c;& 位与运算符、| 位或运行符。参…

盘点6款实用的文件对比工具,你都用过吗?

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

aggregations 详解1(概述)

aggregation分类 aggregations —— 聚合&#xff0c;提供了一种基于查询条件来对数据进行分桶、计算的方法。有点类似于 SQL 中的 group by 再加一些函数方法的操作。 聚合可以嵌套&#xff0c;由此可以组成复杂的操作&#xff08;Bucketing聚合可以包含sub-aggregation&#…

IDEA开发中,类的头位置生成作者时间信息

点击 File > Settings > File and Code Templates > Class按照图中步骤添加如下信息 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end #parse("File Header.java") /** * Author WangZeyu * Date ${…

提现接口网站 php,API提现接口

>获取提现积分的类型&#xff0c;在后台可以设置某种积分可被提现&#xff0c;此处获取的数据为可提现积分的类型~~~[api]get:/index.php/accounts/Apipoint/member_withdrawal_listint:type 0#是否智能限制提现积分类型&#xff0c;0&#xff1a;不智能&#xff0c;1&#…

数据库:PostgreSQL 和 MySQL对比

比较版本&#xff1a;PostgreSQL 11 VS MySQL5.7&#xff08;innodb引擎&#xff09; Oracle官方社区版版权情况&#xff1a;PostgreSQL 11&#xff08;免费开源&#xff09;、MySQL5.7 Oracle官方社区版&#xff08;免费开源&#xff09; 1. CPU限制 PGSQL没有CPU核心数限制&a…

C#获取当前系统磁盘符、系统目录、桌面等

1.获取方式如下 Environment.SpecialFolder中定义了许多常用的目录 //获取当前系统磁盘符方法1&#xff0c;返回&#xff1a;C: string path Environment.GetEnvironmentVariable("systemdrive"); //获取当前系统磁盘符方法2,返回&#xff1a;C: string path Envir…