论坛首页 Java企业应用论坛

一个道说难不难,说简单不简单的Java编程题

浏览 16417 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-03   最后修改:2012-05-03
LZ,是不是又要交作业了,没地方草呢
http://www.iteye.com/topic/1035598
0 请登录后投票
   发表时间:2012-05-03  
{8,12}
要的是这个么?
0 请登录后投票
   发表时间:2012-05-03  
cttnbcj 写道
LZ,是不是又要交作业了,没地方草呢
http://www.iteye.com/topic/1035598



交个p作业啊  ,哥去面试被 问到了。所以拿回来跟大家分享下而已。
0 请登录后投票
   发表时间:2012-05-03  
    public static void main(String[] args) {
        int[] array = {1, 2, 3, -2, 4, 8, -1, 5, -2, 12, 9, -5, 6, 11};
//        int[] array = {-11, -1, -3, -4, -8, -11, -5, -2, -12, -9, -5, -6, -11};
//        int[] array = {0, 0, 0};
//        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int max = 0;
        int temp = 0;
        int indexStart = 0;
        int indexEnd = array.length - 1;
        int count = 0;
        boolean allNegative = true;
        int maxNegativeNum = Integer.MIN_VALUE;
        for (int i = 0; i < array.length; i++) {
            if (array[i] >= 0) {
                allNegative = false;
                temp += array[i];
                count++;
            }
            if (array[i] < 0) {
                if (temp > max) {
                    max = temp;
                    indexStart = i - count;
                    indexEnd = i - 1;
                }
                if (array[i] > maxNegativeNum) {
                    maxNegativeNum = array[i];
                }
                temp = 0;
                count = 0;
            }
        }
        if (temp > max) {
            max = temp;
            indexStart = array.length - count;
            indexEnd = array.length - 1;
        }
        
        if (allNegative) {
            System.out.printf("Max value and sublist are same value: %d%n", maxNegativeNum);
            return;
        }  
        System.out.printf("Max value: %d%nSublist:", max);
        for (int i = indexStart; i <= indexEnd; i++) {
            System.out.printf(" %d", array[i]);
        }
    }
}
0 请登录后投票
   发表时间:2012-05-03  
考算法....动态规划...
0 请登录后投票
   发表时间:2012-05-03  
我没看明白。。。
0 请登录后投票
   发表时间:2012-05-03  
jarorwar 写道
ls2005nba 写道
....我看了题目两遍还是不明白什么意思
去 arr[] 中的元素 组成一个新的数组 。。。
找和最大
。。。。。。 做个循环 把  大于零的加一起 不就好了

当然不是你想的这个样子

可能是我描述的有问题
举个例子,例如数组int a={10,-90,200}
那么它的子数组可以是
{10}
{10,-90}
{10,-90,200}
{-90}
{-90,200}
{200}

当然 最大的子数组之和就是200了


我晕,难道这个子数组里不应该包含{10,200}吗?那么最大的子数组之各应该是210才对啊
0 请登录后投票
   发表时间:2012-05-04   最后修改:2012-05-04
题目说得不清。连帖子标题都不通顺。
应该是求一个数字组成的系列中“和最大的连续子系列”吧。

可以做以下几点处理:
1 结果的首尾一定是正数。所以可以从两端开始去掉负数和0。比如[-1,-2,0,3,4,-3,7,9,-3,-5,0]的最好结果一定在[3,4,-3,7,9]中出现。
2 连续的正数(包含0)一定可以合并。最佳结果中不可能只包含一个连续正数系列的一部分。
3 连续的负数(包含0)也可以合并。因为根据1可知连续的负数一定出现在子系列的中间位置。
4 最终的结果中两端的0可以去掉(也可以不去掉)。


2,3的意思是说如果遇到连续的非正数或非负数,可以直接全部加入(而不需要尝试加入,再求和,再与当前最佳max进行比较)。如
0 请登录后投票
   发表时间:2012-05-04  
这个数组本身最大
0 请登录后投票
   发表时间:2012-05-04   最后修改:2012-05-04
whb1984 写道
    public static void main(String[] args) {
        int[] array = {1, 2, 3, -2, 4, 8, -1, 5, -2, 12, 9, -5, 6, 11};
//        int[] array = {-11, -1, -3, -4, -8, -11, -5, -2, -12, -9, -5, -6, -11};
//        int[] array = {0, 0, 0};
//        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int max = 0;
        int temp = 0;
        int indexStart = 0;
        int indexEnd = array.length - 1;
        int count = 0;
        boolean allNegative = true;
        int maxNegativeNum = Integer.MIN_VALUE;
        for (int i = 0; i < array.length; i++) {
            if (array[i] >= 0) {
                allNegative = false;
                temp += array[i];
                count++;
            }
            if (array[i] < 0) {
                if (temp > max) {
                    max = temp;
                    indexStart = i - count;
                    indexEnd = i - 1;
                }
                if (array[i] > maxNegativeNum) {
                    maxNegativeNum = array[i];
                }
                temp = 0;
                count = 0;
            }
        }
        if (temp > max) {
            max = temp;
            indexStart = array.length - count;
            indexEnd = array.length - 1;
        }
        
        if (allNegative) {
            System.out.printf("Max value and sublist are same value: %d%n", maxNegativeNum);
            return;
        }  
        System.out.printf("Max value: %d%nSublist:", max);
        for (int i = indexStart; i <= indexEnd; i++) {
            System.out.printf(" %d", array[i]);
        }
    }
}



算法不对,你用
{-1,-2,-3,0,0,1, 1,1,-5,1,1,1,1,1,-2,-1,0,4,-3,0,-1}
测试一下,运行结果是
Max value: 5
Sublist: 1 1 1 1 1

正确答案应该是:
Max value: 6
Sublist: 1,1,1,1,1,-2,-1,0,4



如果用 {-1,-2,-3,-4}测试结果也会错误,因为你假设初始最佳max=0,这个假设显示不对。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics