C ++を使用して、arr[i]がO(1)の余分なスペースでarr[arr[i]]になるように配列を再配置します。
正の整数型の配列、たとえば、配列内の要素の値が0より大きく、配列のサイズよりも小さい任意のサイズのarr[]が与えられます。タスクは、指定されたO(1)スペース内でのみarr[i]がarr[arr [i]]になるように配列を再配置し、最終結果を出力することです。
このためのさまざまな入出力シナリオを見てみましょう-
入力 − int arr [] ={0 3 2 1 5 4}
出力 −配置前の配列:0 3 2 1 5 4 arr[i]がO(1)の余分なスペースでarr [arr [i]]になるように配列を再配置すると、次のようになります。0 1 2 3 4 5
説明 −サイズ6の整数配列と、6未満の配列値のすべての要素が与えられます。次に、配列を再配置します。つまり、arr [arr [0]は0、arr [arr [1]]は1、arr [arr [2]]は2、arr [arr [3]]は3、arr [arr [4]]は4、arr [arr [5]]は5です。したがって、再配置後の最終的な配列は012です。 3 4 5.
入力 − int arr [] ={1、0}
出力 −配置前の配列:1 0 arr[i]がO(1)の余分なスペースでarr [arr [i]]になるように配列を再配置すると、次のようになります。0 1
説明 −サイズ2の整数配列と、2未満の配列値のすべての要素が与えられます。次に、配列を再配置します。つまり、arr [arr [0]は1、arr [arr[1]]は0です。 、再配置後の最終的な配列は01です。
入力 − int arr [] ={1、0、2、3}
出力 −配置前の配列:1 0 2 3 arr[i]がO(1)の余分なスペースでarr [arr [i]]になるように配列を再配置すると、次のようになります。0 1 2 3
説明 −サイズ4の整数配列と、4未満の配列値のすべての要素が与えられます。次に、配列を再配置します。つまり、arr [arr [0]は0、arr [arr [1]]は1、arr [arr [2]]は2、arr [arr [3]]は3です。したがって、再配置後の最終的な配列は0 123です。
以下のプログラムで使用されているアプローチは次のとおりです
-
整数型要素の配列を入力し、配列のサイズを計算します
-
配列の前に配列を印刷し、関数Rearrangement(arr、size)を呼び出します
-
関数Rearrangement(arr、size)の内部
-
iがサイズより小さくなるまでiから0までループFORを開始します。ループ内で、tempをarr [arr [i]]%sizeおよびarr [i] + =temp*sizeとして設定します。
-
iがサイズより小さくなるまでiから0までループFORを開始します。ループ内で、arr [i] =arr [i] / size
を設定します
-
-
結果を印刷します。
例
#include <bits/stdc++.h> using namespace std; void Rearrangement(int arr[], int size){ for(int i=0; i < size; i++){ int temp = arr[arr[i]] % size; arr[i] += temp * size; } for(int i = 0; i < size; i++){ arr[i] = arr[i] / size; } } int main(){ //input an array int arr[] = {0, 3, 2, 1, 5, 4}; int size = sizeof(arr) / sizeof(arr[0]); //print the original Array cout<<"Array before Arrangement: "; for (int i = 0; i < size; i++){ cout << arr[i] << " "; } //calling the function to rearrange the array Rearrangement(arr, size); //print the array after rearranging the values cout<<"\nRearrangement of an array so that arr[i] becomes arr[arr[i]] with O(1) extra space is: "; for(int i = 0; i < size; i++){ cout<< arr[i] << " "; } return 0; }
出力
上記のコードを実行すると、次の出力が生成されます
Array before Arrangement: 0 3 2 1 5 4 Rearrangement of an array so that arr[i] becomes arr[arr[i]] with O(1) extra space is: 0 1 2 3 4 5
-
C ++のO(1)空間で要素0からN-1の定数配列で重複を検索します
0からn-1までの数字のリストがあるとします。数は可能な限り何度でも繰り返すことができます。余分なスペースをとらずに繰り返し番号を見つける必要があります。 n =7の値で、リストが[5、2、3、5、1、6、2、3、4、5]のような場合。答えは5、2、3になります。 これを解決するには、次の手順に従う必要があります- リスト内の各要素eについて、次の手順を実行します- sign:=A[eの絶対値] 符号が正の場合は負にします それ以外の場合は繰り返しです。 例 #include<iostream> #include<cmath> using namespace
-
C++の整数の配列で最大の積を持つペアを見つけます
配列Aがあるとすると、n個の異なる要素があります。 xとyの積が最大になるように、配列Aからペア(x、y)を見つける必要があります。配列には正または負の要素が含まれる場合があります。配列がA=[-1、-4、-3、0、2、-5]のようであるとすると、積が最大になるため、ペアは(-4、-5)になります。 この問題を解決するには、positive_max、positive_second_max、negative_max、negative_second_maxの4つの数値を追跡する必要があります。最後に、(positive_max *positive_second_max)が(negative_ma