Java实现最大连续子数组和
1 问题描述
给定一个整数数组,数组里可能有正数、负数和零。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。例如,如果输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},那么输出为该子数组的和18。
2 解决方案
2.1 蛮力枚举法
package com.liuzhen.array_2;
public class MaxSubArray {
public int bruteMethod(int[] A){
int maxResult = A[0];
int maxTemp = 0;;
for(int i = 0;i < A.length;i++){
for(int j = i;j < A.length;j++){
for(int k = i;k <= j;k++){
maxTemp += A[k];
}
if(maxTemp > maxResult)
maxResult = maxTemp;
maxTemp = 0; //完成一个子序列求和后,重新赋值为0
}
}
return maxResult;
}
public static void main(String[] args){
MaxSubArray test = new MaxSubArray();
int[] A = {1,-2,3,10,-4,7,2,10,-5,4};
System.out.println("使用蛮力法求解数组A的最大连续子数组和为:"+test.bruteMethod(A));
}
}
运行结果:
使用蛮力法求解数组A的最大连续子数组和为:28
2.2 动态规划法
package com.liuzhen.array_2;
public class MaxSubArray {
public int dynaticMethod(int[] A){
int maxResult = A[0];
int maxTemp = 0;
for(int i = 0;i < A.length;i++){
if(maxTemp >= 0)
maxTemp += A[i];
else
maxTemp = A[i];
if(maxTemp > maxResult)
maxResult = maxTemp;
}
return maxResult;
}
public static void main(String[] args){
MaxSubArray test = new MaxSubArray();
int[] A = {1,-2,3,10,-4,7,2,10,-5,4};
System.out.println("使用动态规划法求解数组A的最大连续子数组和为:"+test.dynaticMethod(A));
}
}
运行结果:
使用动态规划法求解数组A的最大连续子数组和为:28
Java实现最大连续子数组和的更多相关文章
- Java课程课后作业190315之从文档中读取随机数并得到最大连续子数组
从我上一篇随笔中,我们可以得到最大连续子数组. 按照要求,我们需要从TXT文档中读取随机数,那在此之前,我们需要在程序中写入随机数 import java.io.File; import java.i ...
- LeetCode 581. Shortest Unsorted Continuous Subarray (最短无序连续子数组)
Given an integer array, you need to find one continuous subarray that if you only sort this subarray ...
- LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)
581. 最短无序连续子数组 581. Shortest Unsorted Continuous Subarray 题目描述 给定一个整型数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序 ...
- [LeetCode] Shortest Unsorted Continuous Subarray 最短无序连续子数组
Given an integer array, you need to find one continuous subarray that if you only sort this subarray ...
- Leetcode 581.最短无序连续子数组
最短无序连续子数组 给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序. 你找到的子数组应是最短的,请输出它的长度. 示例 1: 输入: [2, ...
- 【LeetCode】1438. 绝对差不超过限制的最长连续子数组 Longest Continuous Subarray With Absolute Diff Less Than or Equal t
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 滑动窗口 日期 题目地址:https://leetco ...
- The Day Two 找到一个具有最大和的连续子数组,返回其最大和
""" 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5, ...
- Leetcode581.Shortest Unsorted Continuous Subarray最短无序连续子数组
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序. 你找到的子数组应是最短的,请输出它的长度. 示例 1: 输入: [2, 6, 4, 8, 1 ...
- 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度
题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...
随机推荐
- Linux 面试最常问的十个问题
如果你要去面试一个Linux系统运维工程师的职位,下面这十个最常见的问题一定要会,否则你的面试可能就危险了.这些都是比较基本的问题,大家要理解,不能光死记硬背. 1.如何查看系统内核的版本 这里有两种 ...
- Mysql 常用函数(14)- lower 函数
Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html lower 的作用 将所有字符串更改为小写,然后返 ...
- C#winform跨窗体传值和调用事件的办法
有三个窗体,分别是Main主窗体,Form1窗体1,From2窗体2,其中Main是主窗体,Form1窗体1是一个消息通知窗体,Form2窗体2主窗体的一个子窗体,程序启动时,消息框窗体1弹出,通过消 ...
- myeclipse 2017 CI 破解
1.首先下载破解文件(破解前先关闭myeclipse),链接:https://pan.baidu.com/s/1CPFH4Nga3xITSyj-BCVeaw 提取码:mkvz 2.将下载的破解文件解压 ...
- Java openrasp学习记录(一)
前言: 最近一直在做学校实验室安排的项目,太惨了,没多少时间学习新知识,不过rasp还是要挤挤时间学的,先从小例子的分析开始,了解rasp的基本设计思路,后面详细阅读openrasp的源码进行学习!欢 ...
- $releasever 不正确解析
[nginx] gpgcheck=0 baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ name=nginx repo 这 ...
- POJ3275 Ranking the Cows floyd的bitset优化
POJ3275 Ranking the Cows #include <iostream> #include <cstdio> #include <bitset> u ...
- nginx配置之状态模块和压力测试功能
状态模块功能 nginx.conf中的http{}中的server{}中: location /status { #开启nginx状态功能 stub_status on; } 直接在网页中请求stat ...
- Python创建一个简单的区块链
区块链(Blockchain)是一种分布式账本(listributed ledger),它是一种仅供增加(append-only),内容不可变(immutable)的有序(ordered)链式数据结构 ...
- 蓝桥杯 试题 历届试题 对局匹配 DP解决
问题描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起.如果两人分差 ...