まず結論

科目Bの最終仕上げとして、配列操作の典型問題(回転・マージ・重複チェック・逆順)をトレース表を使って解く練習をします。問題文を読んでトレース表を書き、選択肢と照合する一連の流れを体で覚えましょう。

配列操作の視覚イメージ

左回転(rotateLeft)
1
2
3
4
5
2
3
4
5
1
先頭をtmpに退避 → 左シフト → tmpを末尾へ
逆順(reverse)
1
2
3
4
5
5
4
3
2
1
i=1〜n÷2 で a[i] ↔ a[n+1-i] を交換
マージ(2つのソート済み配列を統合)
a[]
1
3
5
+
b[]
2
4
6
c[]
1
2
3
4
5
6
小さい方を順に選んで c[] に追加
重複チェック(O(n²) 全ペア比較)
3
1
4
1
5
a[2]=1 = a[4]=1 → 真(重複発見)
発見した瞬間にreturn → 最良O(1)

演習1:配列の回転(ローテーション)

// 配列を左に1つシフト(先頭を末尾に移動) 手続き rotateLeft(a, n) tmpa[1] // 先頭を退避 i を 1 から n-1 まで繰り返す a[i] ← a[i+1] // 1つずつ左にずらす 繰り返し終わり a[n] ← tmp // 退避した先頭を末尾に 手続き終わり
操作配列の状態
初期(n=5)[1, 2, 3, 4, 5]
tmp ← a[1]tmp=1, 配列変化なし
i=1: a[1]←a[2][2, 2, 3, 4, 5]
i=2: a[2]←a[3][2, 3, 3, 4, 5]
i=3: a[3]←a[4][2, 3, 4, 4, 5]
i=4: a[4]←a[5][2, 3, 4, 5, 5]
a[5] ← tmp(=1)[2, 3, 4, 5, 1]

演習2:配列の重複チェック

// 配列に重複した要素があるかどうかを確認 手続き hasDuplicate(a, n) i を 1 から n-1 まで繰り返す j を i+1 から n まで繰り返す もし a[i] = a[j] ならば 真 を返す // 重複発見 もし終わり 繰り返し終わり 繰り返し終わり 偽 を返す // 重複なし 手続き終わり
ポイント:i=1からn-1まで、j=i+1からnまでの二重ループで全ペアを比較。計算量はO(n²)。同じ要素が見つかった瞬間に「真」を返して終了(早期リターン)。

演習3:マージ(2つのソート済み配列を統合)

// a[1..m]とb[1..n](両方昇順)をマージしてc[]に格納 i1 // aのポインタ j1 // bのポインタ k1 // cのポインタ i が m 以下 かつ j が n 以下 の間, 繰り返す もし a[i] ≦ b[j] ならば c[k] ← a[i], ii+1 そうでなければ c[k] ← b[j], jj+1 もし終わり kk+1
ij比較c[]へ追加
11a[1]=1 ≦ b[1]=2c[1]=1、i→2
21a[2]=3 > b[1]=2c[2]=2、j→2
22a[2]=3 ≦ b[2]=4c[3]=3、i→3
32a[3]=5 > b[2]=4c[4]=4、j→3
a=[1,3,5], b=[2,4,6]のマージ結果は[1,2,3,4,5,6]。マージソートの核心操作。

配列操作パターンまとめ

操作コードの特徴計算量
最大/最小検索1変数maxを更新しながら1重ループO(n)
合計・平均sum変数を加算しながら1重ループO(n)
線形探索条件一致で即returnO(n)
二分探索left/right/midで範囲を半分にO(log n)
バブルソート2重ループ・隣接交換O(n²)
選択ソート2重ループ・最小値と先頭を交換O(n²)
重複チェック2重ループ・全ペア比較O(n²)
配列回転tmp退避・シフト・tmpを末尾/先頭にO(n)

🎯 試験合格に向けた最終チェックリスト

⚠️ 直前の最終注意事項

✍️ 確認クイズ(総合問題)

Q1. 配列[4, 1, 3, 2]に対してrotateLeft(左に1つ回転)を実行した結果はどれか。
✅ 正解は②。左回転は先頭要素(4)を末尾に移動し、残りを1つずつ前にずらす。[4,1,3,2]→先頭4を退避→[1,3,2,_]→末尾に4→[1,3,2,4]。
Q2. hasDuplicate([3, 1, 4, 1, 5])を実行した結果はどれか。
✅ 正解は①。配列に1が2箇所(a[2]とa[4])あるため重複あり。i=2,j=4のとき a[2]=1=a[4]=1 で真を返します。
Q3. マージアルゴリズムの前提条件として正しいものはどれか。
✅ 正解は②。マージは2つのソート済み配列を統合するアルゴリズム。前提としてどちらの配列もソートされている必要があります(マージソートでも利用される操作)。配列の長さは異なっていても問題ありません。
Q4. 配列[1,2,3,4,5]の逆順([5,4,3,2,1])を作るアルゴリズムとして正しいものはどれか。
✅ 正解は②。配列の逆順は先頭と末尾のペアを順に交換するO(n)のアルゴリズムが効率的です。n=5の場合:i=1でa[1]↔a[5](1↔5)、i=2でa[2]↔a[4](2↔4)、i=2まで(n÷2=2)で完了。中央のa[3]は変化なし。
Q5. 重複チェックアルゴリズム(hasDuplicate)の計算量はどれか。
✅ 正解は②。hasDuplicateは外ループi=1〜n-1、内ループj=i+1〜nの二重ループで全ペア(i,j)を比較します。比較回数はn*(n-1)/2回=O(n²)。ただし重複が見つかった瞬間に即returnするため、最良計算量はO(1)(先頭2要素が重複)となります。最悪(重複なし)がO(n²)です。

Sponsor Link