Conversation
| - 時間計算量: O(N^2 logN) | ||
| - N回sortで毎回O(N logN)のsort | ||
| - nums.lengthが最大で10^4なのでTLE | ||
| - 大体O(10^9)を超えるとTLEする印象。競プロの話です |
There was a problem hiding this comment.
O(109) という表記に違和感を感じます。ビッグオー表記は、計算量がパラメーター (N 等) に対して、どのような関数の形で表現されるかを表します。そのため、 O(???) の中に入る文言は、パラメーターに関する関数 (または 1) であるべきだと思います。
ビッグオー表記の中の関数にパラメーターの上限を代入すると、おおよその計算ステップ数が分かります。今回の場合は、「計算ステップ数が 109 を超えると TLE する印象」と書いたほうが伝わりやすいと思います。
また、計算ステップ数が 109 を超えると TLE する理由については、以下のコメントをご参照ください。
Yuto729/LeetCode_arai60#16 (comment)
There was a problem hiding this comment.
計算ステップ数という表現があるのは存じ上げませんでした。ご指摘ありがとうございます。
また、多言語他言語の実行時間目安は知らなかったので勉強になりました。
| if (top_k_.size() > k_) { | ||
| top_k_.pop(); |
There was a problem hiding this comment.
この問題では必要ないですが、while文を使ってwhile (top_k_.size() > k_) のようにも書けますね。
こちらを好んでいる方もいらっしゃいました。参考
There was a problem hiding this comment.
ありがとうございます。
確かにカプセル化に失敗したりで外部からデータを操作され想定以上のデータが入っていた場合の防御策にはなりますね。
ただそれをするなら、想定より値が少なかったときの処理も考えないとバランスが悪いかなと思いました。
この方式だとk+1番目以降のデータはもはや保持していないので下のコードのようにエラーを投げるしかないですが...
There was a problem hiding this comment.
確かに、外部からの注入なども考えると、要素が少ない時も考慮した方が堅牢ですね。
先程のコメントについては、コードが複雑になった時にミスなく読み書きしやすい、くらいの気持ちでした。
mamo3gr/arai60#25 (comment)
703. Kth Largest Element in a Stream