一昨日面接で質問がありましたjs、python、java、c、cなどの言語を使用して100億のデータを10秒で計算し、それを完了してください(わずか3秒以内)、偶数 奇数の前 形式は次のとおりです 1, 2, 3, 4, 5 出力結果は 2, 1, 4, 3, 6, 5, 質問 2: 1 上のコードでは、for while キーワードを使用せず、100 億個の素数をすべて取得する必要があります (時間は 3 秒を超えることはできません) これを行うにはどうすればよいですか?
认证高级PHP讲师
最初の質問がわかりません。これは、2 つの数字がペアであり、偶数が奇数の前に来るという意味ですか?
2 番目の質問は簡単です。ループを使用できない場合は、配列の反復を使用します。
そういえばphp 的 foreachは関係ないですね(笑
php
foreach
面接官の意図は、再帰関数を書くように求めることだと思いますか?まあ、そうだと思います。
一昨日面接で質問がありましたjs、python、java、c、c++などの言語を使用して、100億のデータを10秒で計算して完了してください(3秒以内のみ)、偶数が来ます奇数の前形式は次のとおりです1、2、3、4、5出力結果は2、1、4、3、6、5、質問2: 1のコードの上に、 100 億からすべての素数を取得する (時間は 3 秒を超えることはできません) これを行うにはどうすればよいですか?
それでは、再帰的なパフォーマンスが十分ではありません。 。 。しかし、私はまだいくつかを使用しています。 。 For Performance
For Performance
。 。 。 100亿 サイズはあるはずです。 まだ見つかりません。
100亿
100億はちょっと大きいので、まずは10万でいきます
このようにして、長さ 100,000 の自然数の配列を取得できます。
偶数が最初、奇数が最後
観察した結果、奇数 + 1、 偶数 - 1は大丈夫であることがわかりました
奇数 + 1
偶数 - 1
最初の質問に答えてください
次の問題は、上記に基づいて素数を取得することです。つまり、zs からすべての素数を取得します。
zs
それから、6の倍数のそれぞれの左辺と右辺をたどって、それらが素数であるかどうかを判断するだけです。 质数分布在 6 的倍数的左边或者右边
质数分布在 6 的倍数的左边或者右边
リーリー
の素数 1 2 3 5 を個別に戻す必要があります。 (ここにはスペルはありません)小于 6
小于 6
結果は写真の通りです1000 万
1000 万
13.8
10 + 3
のボリュームを完了することは不可能です。 13.8 秒 不可能做到 10 + 3 秒内完成 100亿
i5-4210M 12G Chrome 58
i5-4210M
12G
Chrome 58
JavaScript
13 秒で数値.... JavaScript 做不到这样的性能: 100亿 个数字 13
13
データ... G
G
でも100億を13秒で実行するのは難しいと推定されます。 C/C++
C/C++
まず第一に、上の階の素数を見つけるためのアルゴリズムに感謝します。結果とコードを投稿します(直接爆発したのは 1,000 万、1 億のブラウザのみで、再帰は素数を見つけるのに使用できませんでした(私のテストの結果)。それ以外の場合は、Exploded する必要があり、反復することしかできません)。
ブラウザでの結果:
ノードの結果:
最初の質問がわかりません。これは、2 つの数字がペアであり、偶数が奇数の前に来るという意味ですか?
2 番目の質問は簡単です。ループを使用できない場合は、配列の反復を使用します。
そういえば
)php
的foreach
は関係ないですね(笑面接官の意図は、再帰関数を書くように求めることだと思いますか?まあ、そうだと思います。
しばらく使えなくなるので
それでは、再帰的なパフォーマンスが十分ではありません。 。 。しかし、私はまだいくつかを使用しています。 。
For Performance
賢い方法があるかも知れません
。 。 。
100亿
サイズはあるはずです。 まだ見つかりません。コード
100億はちょっと大きいので、まずは10万でいきます
リーリーこのようにして、長さ 100,000 の自然数の配列を取得できます。
次へ
偶数が最初、奇数が最後
観察した結果、
リーリー奇数 + 1
、偶数 - 1
は大丈夫であることがわかりました最初の質問に答えてください
スクリーンショット 1
次へ
次の問題は、上記に基づいて素数を取得することです。つまり、
素数の問題を調べたら、他の人が言いましたzs
からすべての素数を取得します。それから、6の倍数のそれぞれの左辺と右辺をたどって、それらが素数であるかどうかを判断するだけです。
リンク: 素数/素数かどうかの判定 - 通常の判定アルゴリズムから効率的な判定アルゴリズムの考え方まで质数分布在 6 的倍数的左边或者右边
リーリー
スクリーンショット 2の素数 1 2 3 5 を個別に戻す必要があります。 (ここにはスペルはありません)
小于 6
リーリー
テストリーリー
結果は写真の通りです
1000 万
13.8
秒かかりました。10 + 3
秒でのボリュームを完了することは不可能です。
私のコンピューターは13.8
秒 不可能做到10 + 3
秒内完成100亿
i5-4210M
12G
Chrome 58
JavaScript
はこのパフォーマンスを達成できません:13
秒で数値....JavaScript
做不到这样的性能:100亿
个数字13
データ...
上記の考えによれば、G
でも100億を13秒で実行するのは難しいと推定されます。
問題を解決することに集中してください。C/C++
まず第一に、上の階の素数を見つけるためのアルゴリズムに感謝します。結果とコードを投稿します(直接爆発したのは 1,000 万、1 億のブラウザのみで、再帰は素数を見つけるのに使用できませんでした(私のテストの結果)。それ以外の場合は、Exploded する必要があり、反復することしかできません)。
ブラウザでの結果:
ノードの結果:
リーリー