想法(没看解析之前想不出来)
 
-----------------看了解析和答案
1.贪心算法,若当前元素的之前和<0,则丢弃当前元素之前的数列
设一个maxSum作为子序列最大和,一个sum作为当前子序列求和,一个last作为当前元素的之前和;一个now指针遍历数组
now从0开始,每次判断last是否<=0,若小于,则说明加上了也是负增益或无增益,于是丢弃当前元素之前的数列,now+1;若大于则说明是正向增益,将sum更新为nums[now]即当前元素+last;此时判断sum是否大于子序列最大和maxSum,若大于则更新
最后返回maxSum,最后将last更新为sum
 
最后maxSum中的值为最大子数组和
 
 1 class Solution {
2 public int maxSubArray(int[] nums) {
3 int maxSum = nums[0];int sum = nums[0];int last = 0;
4 //设一个maxSum作为子序列最大和,一个sum作为当前子序列求和,一个last作为当前元素的之前和;一个now指针遍历数组
5 if(nums.length==1){
6 return nums[0];
7 }
8 for(int now = 0;now<nums.length;now++){
9 //now从0开始,每次判断last是否>0,now+1
10 if(last>0){//若大于则说明是正向增益,将sum更新
11 sum = nums[now] + last;
12 }else{//若小于,则说明加上了也是负增益或无增益,于是丢弃当前元素之前的数列
13 sum = nums[now];
14 }
15 if(sum>maxSum){
16 //此时判断sum是否大于子序列最大和maxSum,若大于则更新,最后返回maxSum
17 maxSum = sum;
18 }
19 last = sum;//在下一轮中的last为此时的sum
20 }
21 return maxSum;
22 }
23 }
 
2.动态规划,若前一个元素>0就把他加到当前元素上
设一个last指向前一个元素,now指向当前元素。last=0,now=0;
不断移动last和now,若last>0则把它添加到now所指元素上(更新now所指元素);
 
最后遍历数组得到最大值为最大子数组和
 
 
 
 
 
 

Leecode 53.最大子数组和(Java 贪心算法、动态规划两种方法)的更多相关文章

  1. Java 创建线程的两种方法

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

  2. 【java基础 13】两种方法判断hashmap中是否形成环形链表

    导读:额,我介绍的这两种方法,有点蠢啊,小打小闹的那种,后来我查了查资料,别人都起了好高大上的名字,不过,本篇博客,我还是用何下下的风格来写.两种方法,一种是丢手绢法,另外一种,是迷路法. 这两种方法 ...

  3. 实验04——java保留小数的两种方法、字符串转数值

    package cn.tedu.demo; import java.text.DecimalFormat; /** * @author 赵瑞鑫 E-mail:1922250303@qq.com * @ ...

  4. Java中随机数生成的两种方法,以及math的floor

    1.Math的random方法,调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选 ...

  5. java打印等腰三角形的两种方法!(根据行数,根据底边长度)

    首先来看根据用户输入的底边的长度判断: package cn.edu.nwpu.java; import java.util.Scanner; public class IsoscelesTriang ...

  6. java动态代理的两种方法

    动态代理,有两种情况,第一种是有接口的情况下,你可以选择为jdk自带的动态代理的方式来编写程序,但你想要为一个实在的类编写动态代理的方式的话,这时候就必须选择一些开源的lib包,如cglib包,同时还 ...

  7. Java创建线程的两种方法

    大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 ...

  8. Java去重字符串的两种方法以及java中冒号的使用

    package com.removesamestring; import java.io.BufferedWriter; import java.util.ArrayList; import java ...

  9. java web 读取配置文件两种方法

    package com.tsinghua.getDataBaseConn; import java.io.IOException;import java.io.InputStream;import j ...

  10. JAVA实现多线程的两种方法

    参考URL: http://www.cnblogs.com/jbelial/archive/2013/03/17/2964472.html 1.继承 java.lang.Thread 类. 2.实现R ...

随机推荐

  1. 运用python中装饰器方法来解决工作中为原有代码添加功能问题

          Python  装饰器 在实际的工作中,经常碰到领导或产品经理会提出很多甚至(变态)的产品要求,作为python开发,好不容易完成领导的需求,做出一个产品,并且经过测试成功上线.突然有一天 ...

  2. 织梦dedecms网站迁移搬家图文教程

    织梦dedecms网站迁移搬家图文教程 2014-07-31  dedecms教程  文章介绍 织梦作为国内使用最多的程序之一,难免很多新手在接触dede时不知道怎么转移也就是搬家dede的程序,而且 ...

  3. Mysql数据库基础第二章:(八)子查询经典案例

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...

  4. LeetCode 29. 两数相除 时间击败【100.00%】 内存击败【76.25%】

    不禁让我想起了计算机是怎样进行除法运算的,单独考虑溢出以及边界情况,单独考虑符号,其他过程和我们小学除法是一模一样的:左移除数(十进制就是扩大十倍,二进制扩大两倍),直到正好比被除数小,一边累加商(在 ...

  5. Huawei-2488H-V5服务器基础配置与系统安装

    0x00 前言简述 描述: 由于最近公司来了一批华为的服务器以及存储,来的时候真的感到非常意外因为从中标到接货超过了1个半月,其间还因为各种事进行推延: 在现场实施人员完成服务器上架以及测试后,由于业 ...

  6. Go语言互斥锁(sync.Mutex)和读写互斥锁(sync.RWMutex)

    暴力锁 package main import ( "fmt" "sync" "time" ) /* Go语言包中的 sync 包提供了两种 ...

  7. linux搭建FastDFS文件服务器,安装nginx

    本文主要介绍在linux服务器如何搭建FastDFS文件服务器.大概分为9个步骤,由于内容较为繁琐.下面带你入坑! 首先简单介绍一下FastDFS是淘宝资深架构师余庆老师主导开源的一个分布式文件系统, ...

  8. holiday05

    第五天 cat cat会一次性显示所有的内容,适合查看 内容较少 的文本文件 选项 含义 -b 对非空输出行编号 -n 对输出的所有行编号 more more每次只显示一页内容,适合于查看 内容较多 ...

  9. 再见IE

  10. 20192305 王梓全Python程序设计实验二报告

    20192305 王梓全Python程序设计实验二报告 课程:<Python程序设计> 班级: 1923 姓名: 王梓全 学号:20192305 实验教师:王志强 实验日期:2021年4月 ...