0

リストと数値 k を指定すると、最初の k 要素を反転し、次の k 要素を残します。これをリスト全体で繰り返します。反転とは、数値の符号を変更することを意味します。

これはAmazonでのインタビューの質問で、ウェブサイトで偶然見つけたもので、どうすれば解決できるかを考えるだけでアプローチしようとしていました.もちろん、それを解決するための最速のアルゴリズムとあなたのアイデアも知りたいです.

配列を K ステップに分割してから、反転、スキップすることを考えました。次に、マージソートのように配列をマージします。

4

2 に答える 2

2
for (int i=0;i<size;i+=k*2)
    for (int j=0;j<k&&i+j<size;j++)
         arr[i+j]=-arr[i+j];

配列サイズが 2 * k の倍数、または x * 2 * k - k に等しいことが確実な場合:

for (int i=0;i<size;i+=k*2)
    for (int j=0;j<k;j++)
         arr[i+j]=-arr[i+j];
于 2013-10-05T13:38:02.577 に答える