560. Subarray Sum Equals K#16
Conversation
| @@ -0,0 +1,8 @@ | |||
| ### step1 | |||
| 累積和の差がkになる部分をカウントすればいいところまでは思いついたが、うまく実装できなかったのでChatGPTに聞いてsumを管理しながらそれまでの累積和からsum - kをカウントする方法で実装。 | |||
There was a problem hiding this comment.
この辺りは、解き方をもう少し細かく分解すると、自力での実装にたどりつけるかもしれません。
どのあたりでつまづくのか、文章で書いていただけると参考になります。
There was a problem hiding this comment.
累積和の差がkになればsubarrayの和がkになるというところまではわかったのですが、どうすべてを走査するのかが思いつきませんでした。sumにnumsの和を足していきながら、それまでのprefixSumCount[sum - k]を足していけば前から順番にうまく数えられるとあとでわかりました。
| int subarraySum(vector<int>& nums, int k) { | ||
| unordered_map<int, int> mp; | ||
| int count = 0; | ||
| int sum = 0; |
| } | ||
| return count; | ||
| } | ||
| }; No newline at end of file |
| class Solution { | ||
| public: | ||
| int subarraySum(vector<int>& nums, int k) { | ||
| unordered_map<int, int> mp; |
There was a problem hiding this comment.
map や unordered_map は、(キー)_to_(値) という命名をよく見かけます。キーと値にどのような新貝含まれているかが分かりやすいと思います。
| public: | ||
| int subarraySum(vector<int>& nums, int k) { | ||
| unordered_map<int, int> mp; | ||
| int count = 0; |
There was a problem hiding this comment.
std::count と名前が被ってしまうのではないか、とややもやっとしました。自分なら num_subarrays とすると思います。
| class Solution { | ||
| public: | ||
| int subarraySum(vector<int>& nums, int k) { | ||
| unordered_map<int, int> prefixSumCount; |
There was a problem hiding this comment.
lower_snake で命名するのも良く見かけます。この辺りは所属するチームの平均的な書き方に合わせることをお勧めいたします。
参考までにスタイルガイドへのリンクを共有いたします。
https://google.github.io/styleguide/cppguide.html#Variable_Names
The names of variables (including function parameters) and data members are snake_case (all lowercase, with underscores between words).
なお、このスタイルガイドは“唯一の正解”というわけではなく、数あるガイドラインの一つに過ぎません。チームによって重視される書き方や慣習も異なります。そのため、ご自身の中に基準を持ちつつも、最終的にはチームの一般的な書き方に合わせることをお勧めします。
| prefixSumCount[0] = 1; | ||
| for (int num : nums) { | ||
| sum += num; | ||
| if (prefixSumCount.find(sum - k) != prefixSumCount.end()) { |
There was a problem hiding this comment.
contains() を使用したほうがシンプルになると思います。
https://cpprefjp.github.io/reference/unordered_map/unordered_map/contains.html
if (prefixSumCount.contains(sum - k)) {
この問題:https://leetcode.com/problems/subarray-sum-equals-k/description/
次に解く問題:https://leetcode.com/problems/number-of-islands/description/