⚠️ つまずきポイント&対策
1
「二分探索の left/right の更新が混乱する」
mid = (left + right) // 2 で中央を計算。中央の値が目標より小さければ left = mid + 1(右半分へ)、 大きければ right = mid - 1(左半分へ)。+1/-1 を忘れると無限ループになります。
2
「再帰でRecursionError: maximum recursion depth exceeded」
ベースケースが間違っているか、再帰ステップがベースケースに近づいていないことが原因です。 まず少ない入力(n=1, n=2)で手動でトレースしてみましょう。
3
「O(n²) と O(n log n) の違いが実感できない」
n=10000 のデータで実測してみましょう。import time で計測すると、 バブルソートが数秒かかる一方、sorted() は瞬時に完了する差が実感できます。
4
「スタックとキューの使い分けが分からない」
「最後に入れたものを最初に取り出す」→ スタック(例:ブラウザの戻るボタン)。 「最初に入れたものを最初に取り出す」→ キュー(例:コンビニのレジ待ち)。