力ブラシ問題53.最大サブシーケンス和(java)
3390 ワード
タイトル
整数配列numsを指定し、最大和を持つ連続サブ配列(サブ配列には少なくとも1つの要素が含まれている)を見つけ、その最大和を返します.
例:
入力:[−2,1,−3,4,−1,2,1,−5,4],出力:6解釈:連続サブ配列[4,−1,2,1]の和が最大で6であった.ステップアップ:複雑度O(n)の解法を実現した場合は、より優れた分治法を用いて解くことを試みます.
解法
最大のサブ配列の和を算出 sumはサブシーケンスの和であり、sum>0は結果が増加したことを示し、sumは現在の遍歴数 を保持する. sum<=0の場合、sumは結果に対してゲイン効果がないことを示し、捨てる必要がある場合、sumは現在の遍歴数 に直接更新される. sumとansのサイズを比較するたびに、最大値をansに設定し、ループ終了後に結果 を返す.時間複雑度O(n) コード#コード#
整数配列numsを指定し、最大和を持つ連続サブ配列(サブ配列には少なくとも1つの要素が含まれている)を見つけ、その最大和を返します.
例:
入力:[−2,1,−3,4,−1,2,1,−5,4],出力:6解釈:連続サブ配列[4,−1,2,1]の和が最大で6であった.ステップアップ:複雑度O(n)の解法を実現した場合は、より優れた分治法を用いて解くことを試みます.
解法
最大のサブ配列の和を算出
class Solution {
public int maxSubArray(int[] nums) {
if(nums.length < 1) return 0;
int sum = 0;
int ans = nums[0];
for(int i = 0 ; i < nums.length; i++){
if(sum > 0) sum += nums[i];
else sum = nums[i];
ans = Math.max(ans, sum);
}
return ans;
}
}