[解決済み] Googleの面接でのトリッキーな質問
2022-04-23 10:02:52
質問内容
私の友人が就職の面接を受けています。面接の質問のひとつに考えさせられるものがあり、フィードバックが欲しいのです。
次の式が与えられたとき、出力がソートされるように i と j を反復する(最適な)解を求めよ。
2^i * 5^j
つまり、最初の数回はこんな感じでしょうか。
2^0 * 5^0 = 1
2^1 * 5^0 = 2
2^2 * 5^0 = 4
2^0 * 5^1 = 5
2^3 * 5^0 = 8
2^1 * 5^1 = 10
2^4 * 5^0 = 16
2^2 * 5^1 = 20
2^0 * 5^2 = 25
試行錯誤の結果、パターンが見当たりません。どう思いますか?
解決方法は?
Dijkstraは、"A Discipline of Programming"で雄弁な解決策を導き出しています。彼は、この問題をハミングに起因すると考えている。 以下は、Dijkstraの解決策を私が実装したものである。
int main()
{
const int n = 20; // Generate the first n numbers
std::vector<int> v(n);
v[0] = 1;
int i2 = 0; // Index for 2
int i5 = 0; // Index for 5
int x2 = 2 * v[i2]; // Next two candidates
int x5 = 5 * v[i5];
for (int i = 1; i != n; ++i)
{
int m = std::min(x2, x5);
std::cout << m << " ";
v[i] = m;
if (x2 == m)
{
++i2;
x2 = 2 * v[i2];
}
if (x5 == m)
{
++i5;
x5 = 5 * v[i5];
}
}
std::cout << std::endl;
return 0;
}
関連
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] ビッグ・オー、どうやって計算・概算するんだ?
-
[解決済み] Googleの "Did you mean? "はどうなっているのか?アルゴリズムの仕組みとは?[クローズド]
-
[解決済み] 木の深さと高さはどう違うのですか?
-
[解決済み】インプレース基数ソート
-
[解決済み】大きなӨ記号は、具体的に何を表すのですか?
-
[解決済み] フラットな構造から効率的にツリーを構築する方法とは?
-
[解決済み] 2つのキューを使用したスタックの実装
-
[解決済み] スパイラルでループする
-
[解決済み] 光の周波数をRGBに変換する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 末尾再帰とは何ですか?
-
[解決済み] 円周率の計算が正確かどうかを判断するにはどうしたらよいですか?
-
[解決済み] 短縮URLの作成方法を教えてください。[クローズド]
-
[解決済み] 素数かどうかを判断するのに、なぜ平方根まで確認するのか?
-
[解決済み] なぜクイックソートはマージソートより優れているのですか?
-
[解決済み] 木の深さと高さはどう違うのですか?
-
[解決済み] 任意の二分木における2つのノードの最小公倍数の先祖を見つけるには?
-
[解決済み] 幅優先探索を再帰的に実行する
-
[解決済み] 2つのキューを使用したスタックの実装
-
[解決済み] 2^nとn*2^nは同じ時間複雑性か?