トピックはLeetCodeからです
他のソリューションまたはソースコードにアクセスできます:tongji4m3
解説
整数配列numsを指定して、合計が最大の連続サブ配列を見つけ(サブ配列には少なくとも1つの要素が含まれます)、最大の合計を返します。
例:
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
上級:
O(n)の複雑さのソリューションをすでに実装している場合は、より微妙な分割統治ソリューションを使用してみてください。
アイデア
左から右にトラバースします。0より大きい場合は維持し、それ以外の場合は維持しません。結果は時々判断されます
細部
サブ配列には少なくとも1つの要素が含まれているため、初期化を0にすることはできませんが、intの最小値は
コード
//子数组最少包含一个元素
public int maxSubArray(int[] nums)
{
int N = nums.length;
int result = Integer.MIN_VALUE,temp=0;//look,因为条件是至少包含
for (int i = 0; i < N; i++)
{
temp = temp > 0 ? temp + nums[i] : nums[i];
result = Math.max(result, temp);
}
return result;
}
複雑さの分析
時間の複雑さ
O(N)O(N) O (N )
スペースの複雑さ
O(1)O(1) O (1 )