带负数的数列,求解和最大的相邻子序列之二:代码清晰
来源:互联网 发布:epsonl310清零软件下载 编辑:程序博客网 时间:2024/05/09 12:33
程序分两步来实现:
1. getMaxOfAllMinus(arr)----》遍历一遍数组,记录数组的最大值:
1.1 如果全为负数,则返回最大值max,下标pos,allMinus=true
1.2 如果碰到正数,则直接退出循环,返回allMinus=false
2. 如果第一步allMinus=false,则走接下来的逻辑
getMaxSumOver0 ----》遍历数组,赋初始值maxSum=sum=0,起止点start=maxStart=end=maxEnd=0
2.1 如果在下标为index时,sum<0,则sum=0,start=end=index+1
2.2 如果在下标为index时,sum>maxSum,则maxSum=sum,maxStart=start,maxEnd=end=index
package base.algorithm;import java.util.HashMap;import java.util.Map;public class MaxSub {public static void main(String[] args) {double []arr={-1,-0.5,1,-100,1000,-800,900,-1000,-201,100,-80,990,-200,29};double []arr1={-10,-2.4,-3,-6,-1,-22};double []arr2={-10,-2.4,-3,0,-6,-1,-22};System.out.print("maxSubSimplifyCoding==>max of arr-->");maxSubSimplifyCoding(arr);System.out.print("maxSubSimplifyCoding==>max of arr1-->");maxSubSimplifyCoding(arr1);System.out.print("maxSubSimplifyCoding==>max of ar2-->");maxSubSimplifyCoding(arr2);}public static Map<String, Object> maxSubSimplifyCoding(double[] arr){Map<String, Object> retMap = new HashMap<String, Object>();if(arr==null||arr.length==0){System.out.println("数组为空");return retMap;}retMap = getMaxOfAllMinus(arr);/** * 先考虑全是arr[index]<=0恒成立的情况。 */if ((boolean) retMap.get("allMinus")) {return retMap;}else {return getMaxSumOver0(arr);}}private static Map<String, Object> getMaxSumOver0(double[] arr){Map<String, Object> retMap = new HashMap<String, Object>();int index=1,start=0,end=0,maxStart=0,maxEnd=0;double sum=0,maxSum=0;/** * 1. sum{index}>maxSum * 2. 0<sum{index}<=maxSum * 3. 0>=sum{index} */for(;index<arr.length;index++){sum+=arr[index];if (sum<0) {sum = 0;//程序执行到这,已经排除了数列全为负数的情况//容易证明arr[index]不可能是数组的最后一个元素start=end=index+1;}if(sum>maxSum) {maxStart = start;maxEnd = end = index;maxSum = sum;}}System.out.println("maxSum:"+maxSum+" maxStart:"+maxStart+" maxEnd:"+maxEnd);return retMap;}private static Map<String, Object> getMaxOfAllMinus(double[] arr){Map<String, Object> retMap = new HashMap<String, Object>();double max = arr[0];int pos = 0;boolean allMinus = true;for(int index=0;index<arr.length;index++){if (arr[index]>0) {allMinus=false;retMap.put("allMinus", allMinus);return retMap;}if (arr[index]>max) {max = arr[index];pos = index;}}retMap.put("allMinus", allMinus);retMap.put("maxStart", max);retMap.put("maxStart", pos);retMap.put("maxEnd",pos);System.out.println("maxSum:"+max+" maxStart:"+pos+" maxEnd:"+pos);return retMap;}}
0 0
- 带负数的数列,求解和最大的相邻子序列之二:代码清晰
- 带负数的数列,求解和最大的相邻子序列之三:穷举法
- 带负数的数列,求解和最大的相邻子序列之一:性能最佳
- 最大子数列和的问题求解
- ACderem之循环数列的最大连续子序列和
- 数据结构之最大子序列的求解
- 最大子序列和问题的求解
- 最大子序列和问题的求解
- 最大子序列和问题的求解
- 求一个不含0的数列(可以有正数和负数)的最大子序列乘积java
- c++ 求解数列最大的两个子段和
- 最大子序列的求解分析(java代码实现)
- 不相邻的最大子数组和
- 算法笔记1-最大子序列和问题的求解
- 如何求解最大连续子序列的和
- 关于求解最大子序列和问题的总结
- java最大子序列和问题的求解
- 【数据结构与算法】最大子序列和问题的求解
- Codeforces Round #373 (Div. 1) A. Efim and Strange Grade 解题报告
- sd卡拔插或重新上电后无法继续使用(初始化失败)
- DVD管理系统
- Integrating Gear VR and the AR/VR Sample in Unity 5.3
- 教你从头到尾利用DL学梵高作画:GTX 1070 cuda 8.0 tensorflow gpu版
- 带负数的数列,求解和最大的相邻子序列之二:代码清晰
- Grunt 简介
- win10 切换Fn热键
- 基于node服务器的socket在线聊天室代码解析!
- Typecho 主题与插件
- 2016.9.25总结
- Leetcode 204. Count Primes
- 背包问题
- java笔记-递归