Kacam.net

アルゴリズム

求第 k 大,为什么用小顶堆

求最大的 100 个,用小顶堆 —— 方向是反的,为什么?

プロンプトをコピーして、どれか一つを選んでください。答えを並べるのではなく、面接官として場面ごとに問い詰めてきます。

アプリを入れたスマートフォンなら、そのままアプリが開きます。WeChat の中では外部アプリを開けないので、先にブラウザで開いてください。

コピーした文章の末尾には採点用の答えが付いています。自分で先に読まないこと —— 自分で導き出せたかどうかが肝心です。

「Top-K 用堆」人人会答,但「大顶堆还是小顶堆」这一问就能分出会和背。正确的心智模型是:堆顶是门槛——目前入选的 k 个里最差的那个,新来的比它好就顶掉它。

这一份还会逼你先问清楚题(数据在内存还是流式、内存多大、要前 k 个还是第 k 个),上来就说「用堆」的会被打断。10 亿个 int 是 4 GB,空间才是这题的重点。

★★★☆☆ · 約 30 分 · 問われるのは:堆顶作为门槛、建堆的真实复杂度、什么时候不该用堆

この一本が鍛えるもの

データ構造の選択 計算量 キャッシュと定数倍

この問題はやったか

ログインすると「この問題はやった」を記録できます。次に来たとき、いつやったか分かります。

やった人の手記

まだ誰も書いていません。やり終えたら、そのやり取りで何が出てきたか書いてください —— どの場面で詰まったか、あとで変えた結論はどれか。

ログインすると手記を書けます。

使い方

この一群は学習型です:答えられなくなるまで追い込むのではなく、導きます。詰まったらまず「どの層で詰まったか」を聞きます(聞いたことがない/知っているがなぜかは分からない/分かるが書けない)。同じ点で二度導いても通じなければ初めて答えを言い、そのあと自分の言葉で言い直させます。

始め方

  1. 一本選んで開き、プロンプトをコピーします。
  2. 新しい空の会話に貼り、何も言わずに最初の質問を待ちます。
  3. コードより先に手で追うこと —— 途中で止められます。長さ 2 の配列で一歩ずつ追うほうが、型を十回書くより効きます。

途中でいつでも使える四つの合図

  • 跳过 すぐ次の場面へ
  • 换个说法 ここを別の角度でもう一度説明してもらう
  • 直说吧 答えを全部聞き、そのあと自分で言い直す
  • 复盘 すぐ締めに飛んで、振り返りカードを出してもらう

三つの落とし穴

  • 末尾の手札を先に読まないこと —— あの「よくある思い違い」の欄が、そのまま各問の答えです。
  • すぐコードを書かないこと。アルゴリズムでは、コードを書く動作が「実は分かっていない」を最も隠しやすいのです。
  • 褒め始めたら「褒めないで」の鉄則を見るように言ってください。導くことは甘やかすことではありません。

解法が思いつかないならまず「状態定義」。境界をよく間違えるなら「二分探索」と「累積和」。問題の形を見抜けないなら「単調スタック」と「尺取り法」。「計算量」の一本は他の何本かの土台なので早めに。