面接タスク。 「考える」ための3つの適切なパズル

そして再びインタビューについて。 いくつかの簡単なタスクは時々難しいです。 この投稿では、私が気に入ったインタビューの3つのタスクを検討したいと思います。なぜなら、自分で解決策にたどり着くことができますが、まだ少し考えなければならないからです。









タスク1.プログラマーの甘やかさを確認する



1からNまでの番号の順序付けられたシーケンスが与えられた場合、1つの番号が削除され、残りの番号は混合されました。 リモート番号を見つけます。


「順序付けられたシーケンス」という句は1つだけ紛らわしいため、ソートを使用してこの問題を解決することができます。 プログラマーは既製のライブラリとフレームワークを使用することが多いため、問題を解決する際に、ライブラリから何を使用するかを自動的に考えます。 多くのプログラマにとって、唯一の明らかな解決策は、結果のシーケンスをソートし、最初の不一致まで元のシーケンスとソートされたシーケンスの要素ごとの比較を行うことです。 このようなソリューションの複雑さを計算できます。 $ O(N log N)$ ソートの複雑さと線形検索の複雑さ。 うーん、それは何らかの形でソリューションにアプローチできますか?



より簡単な解決策があります。
シーケンスが順序付けられていることを忘れましょう。 両方のシーケンスの違いは1つだけです。つまり、それを見つけるには、元のシーケンスの要素の合計から取得した量を減算する必要があります。 ちなみに、すべての要素が一意である場合、元の配列には算術級数があり、最初の合計は次のように計算できます $(a_1 + a_n)n / 2 $



タスク2.数字のジャグリング



あなたは5リットルと3リットルの水差しと無制限の量の水を持っています。 正確に4リットルの水を測定する方法は? 水差しの形状は不規則であるため、水差しの半分を正確に測定することはできません。


これは私のお気に入りのパズルゲームです。 一方では、少し考える必要があり、他方では、それは本当にシンプルで適切です。



解決策
ここで、素数5と3を少し調整する必要があります。



1. 3リットルの水差しを満たします。 これらの3リットルを5リットルの水差しに注ぎます。

2.再度、3リットルの水差しを満たし、そこから5リットルの水差しに注ぎます。 5リットルの水差しには3リットルがあり、完全に満たされるまで2リットルが別の水差しから注がれることに注意してください。 3リットルの水差しには、1リットルが残っていました。

3. 5リットルの水差しを空にします。 測定された1リットルを注ぎます。 繰り返しますが、3リットルの水差しを満たし、そこから5リットルの水差しに注ぎます。 現在、大きな水差しに4リットルの水があります。



タスク3.仲介なし



2つの数字があります。 追加の変数を使用せずにそれらを交換することは可能ですか?


結局のところ、これは非常に人気のあるパズルです。 しかし、私は重大な欠陥で決定しました。



算術演算またはビット演算を使用して問題を解決できます。 算術は簡単に見えるので、私はそれらを使用することにしました。



解決策
AとBがあるとします。



A = A + B

B = A-B //その後、BはAになります。 実際、(A + B)-B = Aを取得します

A = A-B



この決定には大きなマイナス点があります。オーバーフローの可能性です。 したがって、XORビット演算を使用することをお勧めします。



A = A ^ B

B = A ^ B

A = A ^ B



仕組み:最初の行では、異なるビットのマスクを取得します。これらの数字には1があります。 次に、必要なビットがリセットされ、値の交換に設定されます。

たとえば、より明確になります。 番号5と9の交換を検討してください。



A = 0101 ^ 1001 = 1100

B = 1100 ^ 1001 = 0101

A = 1100 ^ 0101 = 1001



みなさんにインタビューの成功を祈るだけです!



また、コメントには、あなたが出会ったタスクを書くことができます。



All Articles