C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++を使用して最大最小形式で配列を再配置します


ソートされた配列が与えられます。この配列を最大、最小の形式で配置する必要があります。つまり、最初の要素が最大要素、2番目の要素が最小要素、3番目の要素が2番目の最大要素、4番目の要素が2番目の最小要素というように配置します。例-

Input : arr[ ] = { 10, 20, 30, 40, 50, 60 }
Output : { 60, 10, 50, 20, 40, 30 }
Explanation : array is rearranged in the form { 1st max, 1st min, 2nd max, 2nd min, 3rd max, 3rd min }

Input : arr [ ] = { 15, 17, 19, 23, 36, 67, 69 }
Output : { 69, 15, 67, 17, 36, 19, 23 }

配列を最大および最小の形式で再配置する単一のアプローチがあります-

解決策を見つけるためのアプローチ

配列を最大および最小の形式で再配置する単一のアプローチがあります-

2ポインターアプローチ

ここでは、最大要素と最小要素を指す2つの変数、minとmaxを使用し、同じサイズの新しい空の配列を作成して、再配置された配列を格納します。次に、配列を反復処理し、反復要素が偶数のインデックスにある場合は、arr [max]要素を空の配列に追加し、maxを1ずつデクリメントします。要素が奇数のインデックスにある場合は、arr[min]要素をに追加します。空の配列を作成し、minを1ずつインクリメントします。maxがminより小さくなるまでこれを実行します。

#include <bits/stdc++.h>
using namespace std;

int main () {
   int arr[] = { 1, 2, 3, 4, 5, 6 };
   int n = sizeof (arr) / sizeof (arr[0]);
   // creating a new array to store the rearranged array.
   int final[n];
   // pointing variables to initial and final element index.
   int min = 0, max = n - 1;
   int count = 0;
   // iterating over the array until max is less than or equals to max.
   for (int i = 0; min <= max; i++) {
      // if count is even then store max index element

      if (count % 2 == 0) {
         final[i] = arr[max];
         max--;
      }
      // store min index element
      else {
         final[i] = arr[min];
         min++;
      }
      count++;
   }
   // printing the final rearranged array.
   for (int i = 0; i < n; i++)
      cout << final[ i ] << " ";
   return 0;
}

出力

6 1 5 2 4 3

上記のコードの説明

  • 変数はmin=0およびmax=array_length(n)-1として初期化されます。
  • for(int i =0; min <=max; i ++)は、maxがminより大きくなるまで配列を反復処理します。
  • カウントが奇数の場合、(max)要素が最終配列に追加され、変数maxが1だけデクリメントされます。
  • カウントがその時(分)であると仮定します。その場合、要素は最終的な配列に追加され、変数minは1ずつ増加します。
  • 最後に、結果の配列はfinal[]配列に格納されます。

結論

この記事では、指定された配列をmax-min形式に再配置するソリューションについて説明しました。ソリューションのアプローチについて説明し、時間計算量O(n)の楽観的なソリューションで解決しました。同じためのC++プログラムも作成します。同様に、このプログラムはC、Java、Pythonなどの他の言語で作成できます。この記事がお役に立てば幸いです。


  1. 二分探索を使用して配列内の最大要素を検索するC++プログラム

    これは、二分探索木を使用して配列の最大要素を見つけるためのC++プログラムです。このプログラムの時間計算量はO(log(n))です。 アルゴリズム Begin Construct the Binary Search Tree using the given data elements. Next traverse the root pointer to the rightmost child node available. Print the data part of the node as the maximum data element of the given data

  2. 線形検索を使用して配列内の最小要素を検索するC++プログラム

    これは、線形探索アプローチを使用して配列の最小要素を見つけるためのC++プログラムです。このプログラムの時間計算量はO(n)です。 アルゴリズム Begin Assign the data element to an array. Assign the value at ‘0’ index to minimum variable. Compare minimum with other data element sequentially. Swap values if minimum value is more then the value at