Skip to content

198. House Robber#48

Open
colorbox wants to merge 1 commit intomainfrom
198
Open

198. House Robber#48
colorbox wants to merge 1 commit intomainfrom
198

Conversation

@colorbox
Copy link
Copy Markdown
Owner

@colorbox colorbox commented Apr 7, 2026

Comment on lines +8 to +9
int twoPreviousMaximumRobbedMoney = nums[0];
int previousMaximumRobbedMoney = max(nums[0], nums[1]);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

こちらは2つの状態、A:「最後に盗んだのが2つ以上前の家であるとき
」, B:「1つ以上前の家であるとき」に分けて考えたと思いますが、A ⊃ Bなので、以下のように分けると排反になって良いかなと思いました。

  • 1つ前の家をスキップしたとき = last_skipped
  • 1つ前の家に盗みに入ったとき = last_robbed
    具体的な解法は過去のコメントにあったと思います。

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

こちらなどにありますね.

一方で私は必ずしも排反にする必要性もないかな,と感じました.というのも今回は排反にすることで嬉しいことが起こるケースもありますが,今回は特に嬉しさは感じなかったためです.
むしろ,「一つ前を盗んでいる可能性があるかどうか」で場合分けする方が,条件から素直に出てくる考えでわかりやすいと感じます.
この辺は感性の問題だと思いますので,単なる一意見として参考にしてください.

Comment on lines +23 to +25
if (nums.size() == 1) {
return nums[0];
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nums.size() == 1のみを例外処理している点に違和感を覚えました.
というのもnums.size() == 1でもこの行以降のコードは正しく動くからです.コーナーケースとして明示的に扱うなら,(問題の制約上あり得ないですが)nums.size() == 0(つまりnums.empty() == True)も考慮したコードの方が,実用的に感じました.

}
maximumBenefit[0] = nums[0];
for (int i = 1; i < nums.size(); ++i) {
int benefit = nums[i];
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

benefitは単なる利益でなくnums[i]から奪った時の最大利益なので,やや説明的すぎる気もしますが,

  • benefit_with_ith_house
  • benefit_robbing_ith_house
  • benefit_robbing_last_house

などはいかがでしょうか.
(もっとも,この規模のコードならbenefitでも十分に意図は伝わると思います.)

Comment on lines +8 to +9
int twoPreviousMaximumRobbedMoney = nums[0];
int previousMaximumRobbedMoney = max(nums[0], nums[1]);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

こちらなどにありますね.

一方で私は必ずしも排反にする必要性もないかな,と感じました.というのも今回は排反にすることで嬉しいことが起こるケースもありますが,今回は特に嬉しさは感じなかったためです.
むしろ,「一つ前を盗んでいる可能性があるかどうか」で場合分けする方が,条件から素直に出てくる考えでわかりやすいと感じます.
この辺は感性の問題だと思いますので,単なる一意見として参考にしてください.

if (nums.size() == 1) {
return nums.front();
}
int twoPreviousMaximumRobbedMoney = nums[0];
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Maximum という単語は、しばしば Max と略されるのを目にします。 Minimum も Min と略されるように思います。

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.

4 participants