| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 463 人关注过本帖
标题:下面是我写的获取最大序列的方法,最终值是对的,但是中间有几条语句执行有 ...
只看楼主 加入收藏
郭赛
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2017-12-9
结帖率:75%
收藏
已结贴  问题点数:30 回复次数:3 
下面是我写的获取最大序列的方法,最终值是对的,但是中间有几条语句执行有问题
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class MaxList {
    public static void main(String[] args) {
        int[] array = new int[]{-1,2,3,4,-5,6,7};
        maxlist(array);
    }
    public static ArrayList<Integer> maxlist(int[] array) {
        ArrayList<Integer> max = new ArrayList<>();//用于接收最大序列
        ArrayList<Integer> receive = new ArrayList<>();//用于接收所有最大序列的和
        HashMap<Integer, ArrayList<Integer>> hash = new HashMap<>();//用于存储返回的序列和它的索引值
        if (array.length == 0)
            return null;
        else if (array.length == 1) {
            max.add(array[0]);
            System.out.println(max);
            return max;

        }
            max.add(array[0]);
            receive.add(Sum(max));

            for (int i = 1; i < array.length; i++) {
                if (Sum(max) > 0) {
                    max.add(array[i]);
                    System.out.println(Sum(max));
                    receive.add(Sum(max));//如果前面的序列大于0,那么添加后面的一个数组元素并且存储当前集合的和
                    System.out.println(receive);
                    System.out.println(max);
                    hash.put(Sum(max), max);
                    System.out.println(hash); //执行结果是:
                }

                else if (Sum(max) <= 0) {
                    //max.add(array[i]);

                    //System.out.println(max);
                    max.clear();
                    receive.clear();
                    max.add(array[i]);
                    //System.out.println("max:" + max);
                    receive.add(array[i]);//如果前面的序列小于等于0,那么直接将当前数组的值作为receive的元素
                    //System.out.println(receive);
                    hash.put(array[i], max);
                    System.out.println(hash);
                    System.out.println("=======================");
                }

            }
            System.out.println("=======================");
            //Collections.sort(receive);
            //System.out.println(receive);
            System.out.println(hash);
            //System.out.println(receive.size());
            System.out.println(hash.get(receive.get(receive.size() - 1 )));//求出最大序列
            return hash.get(receive.get(receive.size() - 1));


    }

    public static int Sum(ArrayList<Integer> array){
        int sum = 0;
        for (int i = 0; i < array.size(); i++) {
            sum += array.get(i);
        }
        return sum;
    }
}

附件: 游客没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: println System max out array 
2020-05-05 15:46
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2203
专家分:10050
注 册:2015-3-19
收藏
得分:0 
这个最大序列是不是指的,求和最大连续子集合?

剑栈风樯各苦辛,别时冰雪到时春
2020-05-05 17:29
郭赛
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2017-12-9
收藏
得分:0 
回复 2楼 林月儿
是的
2020-05-06 01:15
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2203
专家分:10050
注 册:2015-3-19
收藏
得分:30 
程序代码:
public class Test {
    public static void main(String[] args) {
        int[] array = new int[]{-1,2,3,4,-5,6,7};
        int maxSum = 0;
        int index0 = 0;
        int index1 = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = i; j < array.length; j++) {
                int sum = 0;
                for (int k = i; k <= j; k++) {
                    sum += array[k];
                }
                if ((i == j && i == 0) || sum > maxSum) {
                    maxSum = sum;
                    index0 = i;
                    index1 = j;
                }
            }
        }
        System.out.println("["+index0+","+index1+"]="+maxSum);
    }
}

剑栈风樯各苦辛,别时冰雪到时春
2020-05-06 07:56
快速回复:下面是我写的获取最大序列的方法,最终值是对的,但是中间有几条语句执 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.071164 second(s), 8 queries.
Copyright©2004-2020, BCCN.NET, All Rights Reserved