Skip to content

347. Top K Frequent Elements - #9

Open
kazizi55 wants to merge 2 commits into
mainfrom
347-top-k-frequent-elements
Open

347. Top K Frequent Elements#9
kazizi55 wants to merge 2 commits into
mainfrom
347-top-k-frequent-elements

Conversation

@kazizi55

@kazizi55 kazizi55 commented Jul 6, 2026

Copy link
Copy Markdown
Owner

@kazizi55
kazizi55 marked this pull request as ready for review July 6, 2026 14:31
num_to_frequency[num] = 1
num_to_frequency_ordered_by_desc = dict(sorted(num_to_frequency.items(), key=lambda item: item[1], reverse=True))
return list(num_to_frequency_ordered_by_desc)[:k]
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

sorted()をもとにreturnするとすっきりすると思います。

        num_to_frequency_ordered_by_desc = sorted(num_to_frequency.items(), key=lambda item: item[1], reverse=True)
        return [num for num, _ in num_to_frequency_ordered_by_desc[:k]]

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.

ありがとうございます!
確かにスッキリしました。余計な dict を消すことができたので、num_to_frequency.items() の num を使うという意図がよりはっきり表現できるようになった感じがあります。
49a93eb

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

sorted(num_to_frequency, key=num_to_frequency.get, reverse=True)[:k]
みたいなのは一応ありますね。
sorted は iterable を取るので、dict を入れると dict key がソートされます。

https://docs.google.com/document/d/11HV35ADPo9QxJOpJQ24FcZvtvioli770WWdZZDaLOfg/edit?tab=t.0#heading=h.dkkbub5o1tvz

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.

こう書けるのですね。
https://discord.com/channels/1084280443945353267/1201211204547383386/1207251531041210408

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        num_to_frequency = defaultdict(int)
        for num in nums:
            num_to_frequency[num] += 1
        return sorted(num_to_frequency, key=num_to_frequency.get, reverse=True)[:k]

この dict key の配列を sort して返すという方が、tuple の解法よりも寄り道しないで解いている感じがあり、個人的には好みです。ご教示いただき、ありがとうございます。

- Step 3: 全部消して、10 分以内にエラーを一度も出さずに正解するのを 3 回続けて行う。
- Step 4: いただいたレビューをもとに、コードを整える。

なお、[oda さんの提案](https://discord.com/channels/1084280443945353267/1366778718705553520/1450943270799671337)を参考に、コードを書く部分にフォーカスして Arai60 を1周しています。今回は2周目に当たります。

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

単純な興味ですが、見え方とか変わりましたか?

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.

はい、明確に変わったと感じます。

1周目の時点ではアルゴリズムほぼ初心者みたいな感じだったので周りを見るのにかなり時間がかかってしまっており余裕もありませんでしたが、2周目になって色んな人のコメントを見るのに前ほど時間をかけなくても良くなり余裕が出てきた感じがあります。解法をただ覚えるのではなく、それぞれの解法を抽象化して理解するのに慣れたからなのではないかなと考えています。

もちろんまだまだ周りを見るのに時間はかかるので精進しないとですが、、


- 各数字と頻度の dict を作成し、その dict を頻度の降順で sort したのちに、上から k 個の keys の配列を返すもの。
- 時間計算量: O(n), 空間計算量: O(n)
- これはこれでスッキリしている気はするが、`その dict を頻度の降順で sort したのちに`の部分のコードがちょっと強引感があるなー。命名は最大限わかりやすくしたつもりだが、それでもワーっとやりたいことをその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.

やや手順増えますが一度 [(freq, num), ...] というタプルのリストにしてからソートしてそのあと num だけ取り出すとかもあり得ますかね?

frequency_and_nums = [(frequency, num) for num, frequency in num_to_frequency.items()]

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.

ありがとうございます!
確かにその方が記述量が減って、やりたいことがより明確に表現できる感じがあって良いですね!
step 4 として追加しました。
49a93eb

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