LintCode 最小子数组 && 最大子数组

题目

给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。

** 注意事项
子数组最少包含一个数字 **

样例
给出数组[1, -1, -2, 1],返回 -3

分析

判断加与不加的情况,这道题的解法很巧妙,类似于背包问题。
每个数组的元素都有两种情况,加与不加,所以我们从第一个元素开始判断,包括第一个元素时,和不包括第一个元素的情况取最小值,进行判断选择。

代码

public class Solution {
    /**
     * @param nums: a list of integers
     * @return: A integer indicate the sum of minimum subarray
     */
    public int minSubArray(ArrayList nums) {
        // write your code
        int min_ending_here = nums.get(0);
        int min_so_far = nums.get(0);
        for(int i=1;i

最大子数组

这道题的思路和最小子数组是一样的,只要更改判断小为判断大就可以了
这里就直接贴出代码

public class Solution {
    /**
     * @param nums: A list of integers
     * @return: A integer indicate the sum of max subarray
     */
    public int maxSubArray(int[] nums) {
        // write your code
        int max_ending_here = nums[0];
        int max_so_far = nums[0];
        for( int i =1 ;i

你可能感兴趣的:(LintCode 最小子数组 && 最大子数组)