初期配列:2 23 34 27 89 14 26 30 60
k = 3
インデックスi=1から開始して、配列内の要素26の後に(つまり、givenIndex = 6の後に)発生するようにk個の要素をシフトする必要があります。
最終的な配列: 2 89 14 26 23 34 27 30 60
余分なスペースを使用することは許可されていません。
私のアプローチ:
count = 0;
while(count < k)
{
count++;
temp = arr[i];
shift all elements from (i+1) to givenIndex to their immediate left position;
arr[givenIndex] = temp;
}
最初の反復:
temp = 23
シフト後、すべての要素を[i + 1](つまりindex = 2)からgivenIndex(つまりindex = 6)に1つずつ左
にシフトします2 34 27 89 14 26 26 30 60
。arr[givenIndex] =
この操作を適用した後の一時配列:2 34 27 89 14 26 23 30 60
同様
に、2回目の反復後の配列:2 27 89 14 26 23 34 30 60
3回目の反復後の配列:2 89 14 26 23 34 27 30 60
最悪の場合の複雑さO(n * k)ここで、nはnoです。配列内の要素の数。
O(n)で問題を解決できますか