1. 程式人生 > >Java實現最大子序和

Java實現最大子序和

題目簡介

給定一個序列(至少含有 1 個數),從該序列中尋找一個連續的子序列,使得子序列的和最大。
例如,給定序列 [-2,1,-3,4,-1,2,1,-5,4],
連續子序列 [4,-1,2,1] 的和最大,為 6。
擴充套件練習:
若你已實現複雜度為 O(n) 的解法,嘗試使用更為精妙的分治法求解。

解題思路

獲取長度
新建陣列
設最大值
迴圈遍歷
對比結果

程式碼實現

第一種用了DP

public int maxSubArray(int[] nums) {
       int n = nums.length;
        int[] dp = new int
[n]; dp[0] = nums[0]; int max = dp[0]; for (int i = 1; i < n; i++) { dp[i] = Math.max(nums[i] + dp[i - 1], nums[i]); max = Math.max(max, dp[i]); } return max; }

第二種用時更短

    public int maxSubArray(int[] nums) {
       int length=nums.length;
        int
sum=nums[0]; int tmpnum=0; for(int i=0;i<length;i++){ tmpnum+=nums[i]; if(tmpnum>sum){ sum=tmpnum; } if(tmpnum<=0) { tmpnum = 0; } } return sum; }

再簡化一下

public int maxSubArray
(int[] nums) { int sum = 0, max = Integer.MIN_VALUE; for(int i = 0; i < nums.length; i++) { sum = sum < 0? nums[i] : (sum + nums[i]); max = Math.max(sum, max); } return max; }

相關推薦

Java實現大子

題目簡介 給定一個序列(至少含有 1 個數),從該序列中尋找一個連續的子序列,使得子序列的和最大。 例如,給定序列 [-2,1,-3,4,-1,2,1,-5,4], 連續子序列 [4,-1,2,1] 的和最大,為 6。 擴充套件練習: 若你已實現複

LeetCode53——Java大子

以後我要養成寫部落格的習慣,所以呢,先開始多記錄吧。 題目:最大子序和 給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列

leetcode-53- 大子(maximum subarray)-java

題目及用例 package pid053; /*最大子序和 給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,

[LeetCode]53. 大子(Maximum suborder and)Java

一、題目: LeetCode地址 給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4

大子 go實現

給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。 進階: 如果你已經實現複雜度為 O(n) 的解法,

leetcode的python實現 刷題筆記53:大子(多種解法)

給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。

LeetCode53.大子(C++實現

先上題目: 方法一:O(N^3)暴力解法(會報超時) //方法一:O(N^3)暴力解法(會報超時) /* O(N^3)的暴力解法比較容易想到,就是利用三層迴圈遍歷計算每個可能的子序列,求其和並進行比較 但是因為時間複雜度太大,在LeetCode會報超時。 */ int maxSub

Leetcode:大子java

給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。 進階: 如果你已經實現複雜度為 O(n) 的解法,嘗

每日一題--LeetCode 53(大子java

題目描述: 程式碼如下: class Solution { public int maxSubArray(int[] nums) { if(nums.length==1){ return nums[0];

leetcode(3)大子的js實現

一.題目描述: 給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6 二.js程式碼實現

領釦--大子--Python實現

給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。 進階: 如果你已經實現複雜度為 O(n) 的解法,

Java&LeetCode 初入門——053. 大子

Java&LeetCode 初入門——053. 最大子序和 題目 個人解法 大神解法 思路 演算法 文內程式碼全部採用JAVA語言。 題目 給定一個整數陣列 nums ,找到一個具有最大和的連

大子

AR 分治法 ret 最大和 子序列 else 時間復雜度 sig 子數組 給定一個序列(至少含有 1 個數),從該序列中尋找一個連續的子序列,使得子序列的和最大。 例如,給定序列 [-2,1,-3,4,-1,2,1,-5,4],連續子序列 [4,-1,2,1] 的和最大,

【leetcode】53. 大子(Maximum Subarray)

變量 最終 code res com 定義 最大的 array ray 解題思路: 定義兩個變量res和curSum,其中res保存最終要返回的結果,即最大的子數組之和,curSum初始值為0,每遍歷一個數字num,比較curSum + num和num中的較大值存入cur

53. 大子

col ray color public 復雜度 () 最大和 輸出 div 給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子

【練習】大子

Tyvj P1305最大子序和 《進階指南》單調佇列例題 連續子序和一般轉化為字首和維護, 記為sum陣列, 連續的子序列[l, r] 的和即為sum[r] - sum[l - 1]  原問題轉化為 找到兩個位置l, r , 使得sum[l] - sum[r] 最大 且 r - l <=

LeetCode演算法題53:大子解析

給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。 這個題如果用暴力破解怕是複雜度有些過於

大子(DP,分治)

  給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。 進階: 如果你已經實現複雜度為

【LeetCode】53. 大子

題目連結:https://leetcode-cn.com/problems/maximum-subarray/description/ 題目描述 給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例 輸入: [-2,

LeetCode 53 大子--python 動態規劃

給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。