LintCode 最小子數(shù)組 && 最大子數(shù)組

題目

給定一個整數(shù)數(shù)組,找到一個具有最小和的子數(shù)組。返回其最小和。

** 注意事項(xiàng)
子數(shù)組最少包含一個數(shù)字 **

樣例
給出數(shù)組[1, -1, -2, 1],返回 -3

分析

判斷加與不加的情況,這道題的解法很巧妙,類似于背包問題。
每個數(shù)組的元素都有兩種情況,加與不加,所以我們從第一個元素開始判斷,包括第一個元素時,和不包括第一個元素的情況取最小值,進(jìn)行判斷選擇。

代碼

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

最大子數(shù)組

這道題的思路和最小子數(shù)組是一樣的,只要更改判斷小為判斷大就可以了
這里就直接貼出代碼

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<nums.length; i++) {
            max_ending_here = Math.max( nums[i] , nums[i] + max_ending_here );
            max_so_far = Math.max( max_so_far, max_ending_here);
        }
        return max_so_far;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,767評論 18 399
  • 雪花終于開始飄下 你對冬愛戀了那么久 還未落地就已融化 伸手接住的剎那 痛 化作淚漫天飄灑 無人的曠野像空蕩的家 ...
    暗香_e921閱讀 387評論 1 4
  • 我叫余依白,大一的時候,同學(xué)們嫌我的名字繞口,都叫我小白,唯有他,堅(jiān)持叫我小依。他說,叫小白,好像你每個方面都很白...
    沐兒閱讀 2,146評論 15 79

友情鏈接更多精彩內(nèi)容