Skip to content

53. Maximum Subarray#31

Open
TakayaShirai wants to merge 1 commit intomainfrom
53_maximum_subarray
Open

53. Maximum Subarray#31
TakayaShirai wants to merge 1 commit intomainfrom
53_maximum_subarray

Conversation

@TakayaShirai
Copy link
Copy Markdown
Owner

@TakayaShirai TakayaShirai self-assigned this Feb 25, 2026
Comment on lines +64 to +67
if (maxSubarraySumsByTail.isEmpty) {
maxSubarraySumsByTail.add(nums[tail]);
continue;
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

関数のはじめにnullチェックをしているので,maxSubarraySumsByTailを作った直後にnums[0]をaddする方が好みです.
forループごとにif文判定が入るが,最初のループのみTrueでadd(nums[0])が行われ,残りは全てfalseなので,ならループごとに判定せず最初からnums[0]だけ追加してしまえば良いのでは,という程度の気持ちです.

Comment on lines +125 to +128
total: nums[start],
maxFromStart: nums[start],
maxToEnd: nums[start],
subArrayMax: nums[start],
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

個人的にはなんのtotalなのか,なんのmaxなのかを示すために,

          totalSum: nums[start],
          maxSumFromStart: nums[start],
          maxSumToEnd: nums[start],
          subArraySumMax: nums[start],

とするとわかりやすいと感じました.
totalが最初何を指しているのかわからず,論理を追って初めて分かったので,totalだけSumをつけても良いかもしれませんが,統一したほうが好みです.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

レビューありがとうございます!

確かに totalSum の方が意味が明確になりますね。参考にさせていただきます🙇


// 分割統治法
class Solution {
int maxSubArray(List<int> nums) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

分割統治はややこしかった記憶があるのですが,こちらのコードは(特に中心を跨ぐ部分列の処理が)だいぶ読みやすかったです.

@5ky7
Copy link
Copy Markdown

5ky7 commented Feb 25, 2026

全体的に読みやすかったです.

Comment on lines +39 to +41
final maxSubarraySumCandidate = prefixSumToNum - minPrefixSum;

maxSubarraySum = max(maxSubarraySum, maxSubarraySumCandidate);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここは一度変数に置くよりも、直接比較したほうが自然言語での説明に近い気がしました。

Suggested change
final maxSubarraySumCandidate = prefixSumToNum - minPrefixSum;
maxSubarraySum = max(maxSubarraySum, maxSubarraySumCandidate);
maxSubarraySum = max(maxSubarraySum, prefixSumToNum - minPrefixSum);


final priorSubarraySum = maxSubarraySumsByTail[tail - 1];
final subarraySum = max(nums[tail], priorSubarraySum + nums[tail]);
maxSubarraySumsByTail.add(subarraySum);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

はじめに決まった長さの配列長を取ったほうが、添字との対応が分かりやすくなりそうに見えました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants