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。