问题:

/**
* 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和,并顺序打印子序列。
* 示例:
* 输入: [-2,1,-3,4,-1,2,1,-5,4],
* 输出: 6,并打印连续子序列
* 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
*/

测试main方法:

    public static void main(String[] args) {
int[] data={1,-2,3,4,-8,12,2};
System.out.println(subSequenceSum01(data));
System.out.println(subSequenceSum02(data));
}

算法一

    //算法一: 穷举遍历,比较找出最大的
private static Integer subSequenceSum01(int[] array){
int maxNum=0;
Map<Integer, List<Integer>> subSequence=new HashMap<>();
for (int i = 0; i < array.length; i++) {
for (int j = i; j < array.length; j++) {
int thisNum=0;
List<Integer> list=new LinkedList<>();//保存子序列
// i: 子序列开始下标 j:结束下标
for (int k = i; k <= j; k++){
thisNum+=array[k]; //每一次计算里循环子序列和
list.add(array[k]);
}
if(thisNum>maxNum){
maxNum=thisNum;
subSequence.put(maxNum,list);//每一次最大值和对应子序列
}
}
}
// Arrays.toString 数组转换字符串
System.out.println("算法一:"+Arrays.toString(subSequence.get(maxNum).toArray()));
return maxNum;
}

算法二

    //算法二, 改进算法一,不需要计算每一次子序列和,采用累加方式,一步步找出最大值
private static Integer subSequenceSum02(int[] array){
int maxNum=0;
Map<Integer, List<Integer>> subSequence=new HashMap<>();
for (int i = 0; i < array.length; i++) {
int thisNum=0;
List<Integer> list=new LinkedList<>();//保存子序列
for (int j = i; j < array.length; j++) {
thisNum+=array[j]; //子序列值累加,从开始累加到结尾计算出最大值
list.add(array[j]);
if(thisNum>maxNum){
maxNum=thisNum;
List<Integer> subList = new ArrayList<>();//每次都需要一个新集合,否则值会变
subList.addAll(list);
subSequence.put(maxNum,subList);//每一次最大值和对应子序列
}
}
}
System.out.println("算法二:"+Arrays.toString(subSequence.get(maxNum).toArray()));
return maxNum;
}

java基础算法(一):最大子序列和问题的多种算法思路的更多相关文章

  1. Java基础常用类深度解析(包含常见排序算法)

    目录 一.工具类 1.1.工具类的设计 1.1.1.公共静态方法 1.2.单例模式 二.包装类 2.1.基本类型的包装类 2.1.1.Integer 2.1.1.1.Integer >> ...

  2. 一、Java基础--01

    Java基础测试题分析 第一题是关于基本的算法知识,这个很有必要去掌握以下,在学校也经常听老师们说找工作比试面试会出一些这方面的知识,我拿到的第一题是关于排序的,虽然很简单,但是我还是要提醒一下基础不 ...

  3. Java基础知识-去重

    java基础知识-去掉list集合中的重复元素: 思路: 首先新建一个容器resultList用来存放去重之后的元素 然后遍历sourceList集合中的元素 判断所遍历的元素是否已经存在于resul ...

  4. 算法入门:最大子序列和的四种算法(Java)

    最近再学习算法和数据结构,推荐一本书:Data structures and Algorithm analysis in Java 3rd 以下的四种算法出自本书 四种最大子序列和的算法: 问题描述 ...

  5. Java基础算法集50题

    最近因为要准备实习,还有一个蓝桥杯的编程比赛,所以准备加强一下算法这块,然后百度了一下java基础算法,看到的都是那50套题,那就花了差不多三个晚自习的时间吧,大体看了一遍,做了其中的27道题,有一些 ...

  6. Java基础:JVM垃圾回收算法

    众所周知,Java的垃圾回收是不需要程序员去手动操控的,而是由JVM去完成.本文介绍JVM进行垃圾回收的各种算法. 1. 如何确定某个对象是垃圾 1.1. 引用计数法 1.2. 可达性分析 2. 典型 ...

  7. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  8. Java基础-使用JAVA代码剖析MD5算法实现过程

    Java基础-使用JAVA代码剖析MD5算法实现过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  9. 阿里P7整理“硬核”面试文档:Java基础+数据库+算法+框架技术等

    现在的程序员越来越多,大部分的程序员都想着自己能够进入大厂工作,但每个人的能力都是有差距的,所以并不是人人都能跨进BATJ.即使如此,但身在职场的我们一刻也不能懈怠,既然对BATJ好奇,那么就要朝这个 ...

随机推荐

  1. 【抖音测试开发日常实习】一二三四面面经,攒人品求Offer

    总结: 一.流程 (估计)一面二面技术leader面,三面部门领导面,四面肯定是HR面 二.系统 用的牛客网面试系统,长相大概是这样:   打字聊天框我在听不清对面声音的时候用过,感觉没啥卵用,手撕代 ...

  2. nginx实现缓存功能

    Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302 ...

  3. 后缀自动机&回文自动机学习笔记

    在学了一天其实是边学边摆之后我终于大概$get$后缀自动机了,,,就很感动,于是时隔多年我终于决定再写篇学习笔记辽$QwQ$ $umm$和$FFT$学习笔记一样,这是一篇单纯的$gql$的知识总结博, ...

  4. PythonI/O进阶学习笔记_9.python的生成器

     content: 1. 什么是生成器 2. 生成器的实现 3. 生成器的应用   一.生成器简介 1.什么是生成器     在 Python 中,使用了 yield 的函数被称为生成器(genera ...

  5. Educational Codeforces Round 53 (Rated for Div. 2) (前五题题解)

    这场比赛没有打,后来补了一下,第五题数位dp好不容易才搞出来(我太菜啊). 比赛传送门:http://codeforces.com/contest/1073 A. Diverse Substring ...

  6. 关于Scrum+XP+DevOps的学习

    最近听了ECUG大会上孙敬云老师的分享感觉受益匪浅,毕竟大学课本上只讲到瀑布模型就没有下文了,工作以后一直贯彻的都是Scrum路线,一直也没有时间好好的去学习整理这部分的知识,直到近几天听到了孙老师的 ...

  7. 2018湘潭邀请赛 AFK题解 其他待补...

    A.HDU6276:Easy h-index Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  8. vue超简单加载字体方法,解决scss难加载字体的问题

    vue超简单加载字体方法,解决scss难加载字体的问题 scss在加载字体方面一直不太好用,需要繁杂的配置才能达到想要的效果,这里说一种非常简单的方法 在App.vue的style标签下引入字体文件后 ...

  9. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第一节:HTTP协议数据采集

    首先欢迎您来到本书的第二境,本境,我们将全力打造一个实际生产环境可用的爬虫应用了.虽然只是刚开始,虽然路漫漫其修远,不过还是有点小鸡冻:P 本境打算针对几大派生类做进一步深耕,包括与应用的结合.对比它 ...

  10. Spring Boot 入门(十二):报表导出,对比poi、jxl和esayExcel的效率

    本片博客是紧接着Spring Boot 入门(十一):集成 WebSocket, 实时显示系统日志写的 关于poi.jxl和esayExcel的介绍自行百度. jxl最多支持03版excel,所以单个 ...