[Leetcode] 1749. Maximum Absolute Sum of Any Subarray
https://leetcode.com/problems/maximum-absolute-sum-of-any-subarray/
入力:整数配列
出力:ローカル配列の絶対値の最大値
局所配列の最大値を求める問題であるため、
コード#コード#
入力:整数配列
出力:ローカル配列の絶対値の最大値
局所配列の最大値を求める問題であるため、
카데인 알고리즘
を用いることができる.なお,部分配列の和に対して絶対値をとるため,負の値の最大値が答えとなる場合もある.この場合,入力配列のすべての記号を置き換えた後,カードデインアルゴリズムをもう一度実行すると答えが見つかる.コード#コード#
class Solution {
public int maxAbsoluteSum(int[] nums) {
int[] positiveDp = new int[nums.length];
positiveDp[0] = nums[0];
kadane(nums, positiveDp);
for (int i = 0; i < nums.length; i++) {
nums[i] *= -1;
}
int[] negativeDp = new int[nums.length];
negativeDp[0] = nums[0];
kadane(nums, negativeDp);
int maxSum = 0;
for (int i = 0; i < positiveDp.length; i++) {
if (maxSum < positiveDp[i])
maxSum = positiveDp[i];
}
for (int i = 0; i < negativeDp.length; i++) {
if (maxSum < negativeDp[i])
maxSum = negativeDp[i];
}
return maxSum;
}
static void kadane(int[] nums, int[] dp) {
for (int i = 1; i < dp.length; i++) {
if (nums[i] < dp[i - 1] + nums[i])
dp[i] = dp[i - 1] + nums[i];
else
dp[i] = nums[i];
}
}
}
Reference
この問題について([Leetcode] 1749. Maximum Absolute Sum of Any Subarray), 我々は、より多くの情報をここで見つけました https://velog.io/@gokoy/Leetcode-1749.-Maximum-Absolute-Sum-of-Any-Subarrayテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol