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

C++でソートおよび回転された配列の最大要素


説明

未知のポイントで回転する個別の要素のソートされた配列が与えられた場合、タスクはその中の最大の要素を見つけることです。

入力配列が{30、40、50、10、20}の場合、最大要素は50です。

アルゴリズム

  • 最大要素は、次の要素がそれよりも小さい唯一の要素です。次に小さい要素がない場合、回転はありません。つまり、最後の要素が最大です
  • 中間要素のこの条件を、mid –1およびmid+ 1の要素と比較して確認します。最大要素がmid–1およびmid+ 1の要素である場合、最大要素が中央にない場合(midでもmidでもない場合) mid + 1)の場合、maximumelementは左半分または右半分のいずれかにあります-
    • 中央の要素が最後の要素よりも大きい場合、最大の要素は左半分にあります
    • それ以外の最大要素は右半分にあります

#include <bits/stdc++.h>
using namespace std;
int getMaxinSortedAndRorated(int *arr, int lont high) {
   if (high < low) {
      return arr[0];
   }
   if (high == low) {
      return arr[high];
   }
   int mid = low + (high - low) / 2;
   if (mid < high && arr[mid + 1] < arr[) {
      return arr[mid];
   }
   if (mid > low && arr[mid] < arr[mid - {
      return arr[mid - 1];
   }
   if (arr[low] > arr[mid]) {
      return getMaxinSortedAndRoratrr, low, mid - 1);
   } else {
      return getMaxinSortedAndRoratrr, mid + 1, high);
   }
}
int main() {
   int arr[] = {30, 40, 50, 10, 20};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Maximum element = " << getMaortedAndRorated(arr, 0, n - 1) << endl;
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Maximum element = 5

  1. C++でソートされた配列の多数決要素を確認します

    7/2と表示されます。 配列内のxの出現を数えることができ、その数がn / 2より大きい場合、答えはtrueになり、そうでない場合はfalseになります。 例 #include <iostream> #include <stack> using namespace std; bool isMajorityElement(int arr[], int n, int x){    int freq = 0;    for(int i = 0; i<n; i++){       if(arr[i]

  2. Pythonで配列が並べ替えられて回転されているかどうかを確認します

    n個の一意の値の配列があるとします。この配列がソートされ、反時計回りに回転しているかどうかを確認する必要があります。ここでは、少なくとも1回のローテーションが必要であるため、完全に並べ替えられた配列は、並べ替えられてローテーションされたとは見なされません。 したがって、入力がnums =[4,5,6,8,1,3]の場合、時計回りに2回回転できるため、出力はTrueになり、[1、3、3のように並べ替えられます。 4、5、6、8]。 これを解決するには、次の手順に従います- min_element:=最小数 min_index:=nums単位のmin_elementのインデックス be