LintCode44:最小子数组

来源:互联网 发布:算法的乐趣 pdf 编辑:程序博客网 时间:2024/06/07 03:04
给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。给出数组[1, -1, -2, 1],返回 -3

代码如下

 public int minSubArray(ArrayList<Integer> nums) {        // write your code        if (nums==null)           return 0;       int len=nums.size();       int[] localmin = new int[len];       int[] globalmin = new int[len];       for(int i =0; i<len;i++){           if (i==0) {            globalmin[i] = localmin[i] = nums.get(i);        }else {            localmin[i] = Math.min(localmin[i-1]+nums.get(i), nums.get(i));            globalmin[i] = Math.min(globalmin[i-1], localmin[i]);        }       }       return globalmin[len-1];    }

这里需要注意的是“子数组”,一开始没注意到子数组,以为直接将其中的负数相加就可以了。结果就出现了例如当数组是[-5,3,-9]的时候输出的结果是-14。真正答案是-9的尴尬。

0 0
原创粉丝点击