↑が面白そうだったので考える.
O(n)の計算量で配列中に最も多い要素(ただしn/2回以上出現)を見つける.
記憶に使っていい容量はc log n bits.
1つ目
- 現在の文字と同じ文字ならカウントを1足す
- 違う文字なら
- カウントが1以上なら1減らす
- カウントが0なら現在の文字を入れ替えて1足す
given = "abcadbeca" count = 0 cur = given[0] for c in given: if cur == c: count += 1 else: if count == 0: cur = c count += 1 else: count -= 1 print cur
2つ目
乱択アルゴリズムかなあ?と思うけど微妙.
その他の方の解答
はてなブックマーク - サマーインターン2011問題 : Preferred Researchの「このエントリーを含む日記」にすごい人の解答があるはず