C++で連続番号のソートされた配列から欠落している要素を検索します
コンセプト
n個の異なる整数の特定の配列array[]に関して、要素は1つの欠落した要素とともに昇順で順番に配置されます。私たちの仕事は、不足している要素を特定することです。
入力
array[] = {1, 2, 3, 4, 5, 6, 7, 9}
出力
8
入力
array[] = {-4, -2, -1, 0, 1, 2}
出力
-3
入力
array[] = {1, 2, 3, 4}
出力
-1
欠落している要素はありません。
メソッド
原則
-
不整合を探す:この原則によれば、要素とそのインデックスの違いは、すべての要素に対してarray[0]である必要があります。
例
A [] ={1、2、3、4、5}->一貫性がある
B [] ={201、202、203、204}->一貫性がある
C [] ={1、2、3、5、6}-> C [3] – 3!=C [0]、つまり5 – 3!=1
として一貫性がない-
不整合を判断すると、O(logN)で毎回アレイの半分だけをスキャンするのに役立ちます。
アルゴリズム
-
真ん中の要素を決定し、それが一貫しているかどうかを確認します。
-
中間要素に一貫性がある場合は、中間要素とその次の要素の差が1より大きいかどうかを確認します。つまり、array [mid + 1] – array [mid]> 1
かどうかを確認します。-
はいの場合、array [mid]+1が欠落している要素です。
-
それ以外の場合は、中央の要素から右半分の配列をスキャンして、ステップ1にジャンプする必要があります。
-
-
中央の要素に一貫性がない場合は、中央の要素とその前の要素の差が1より大きいかどうかを確認します。つまり、array [mid] – array [mid – 1]> 1
-
はいの場合、array [mid] –1が欠落している要素です。
-
それ以外の場合は、中央の要素から左半分の配列をスキャンして、ステップ1にジャンプする必要があります。
-
例
// CPP implementation of the approach #include<bits/stdc++.h> using namespace std; // Shows function to return the missing element int findMissing(int array[], int n1){ int low = 0, high = n1 - 1; int mid1; while (high > low){ mid1 = low + (high - low) / 2; // Verify if middle element is consistent if (array[mid1] - mid1 == array[0]){ // Here, no inconsistency till middle elements // When missing element is just after // the middle element if (array[mid1 + 1] - array[mid1] > 1) return array[mid1] + 1; else{ // Go right low = mid1 + 1; } } else{ // Here inconsistency found // When missing element is just before // the middle element if (array[mid1] - array[mid1 - 1] > 1) return array[mid1] - 1; else{ // Go left high = mid1 - 1; } } } // Here, no missing element found return -1; } // Driver code int main(){ int array[] = { -9, -8, -6, -5, -4, -3, -2, -1, 0 }; int n1 = sizeof(array)/sizeof(array[0]); cout <<"The Missing Element:" <<(findMissing(array, n1)); }
出力
The Missing Element:-7
-
配列の最大要素を見つけるためのC++プログラム
配列には複数の要素が含まれており、配列内の最大の要素は他の要素よりも大きい要素です。 たとえば。 5 1 7 2 4 上記の配列では、7が最大の要素であり、インデックス2にあります。 配列の最大の要素を見つけるプログラムは次のとおりです。 例 #include <iostream> using namespace std; int main() { int a[] = {4, 9, 1, 3, 8}; int largest, i, pos; largest = a[0
-
Pythonで連続番号のソートされた配列から欠落している要素を見つける
n個の一意の番号の配列Aがあり、これらのn個の要素は昇順で配列に存在しますが、欠落している要素が1つあるとします。不足している要素を見つける必要があります。 したがって、入力がA =[1、2、3、4、5、6、7、9]の場合、出力は8になります。 これを解決するには、次の手順に従います- n:=Aのサイズ 左:=0 右:=n-1 mid:=0 左、実行 中央:=左+(右-左)/ 2 A[mid]-midがA[0]と同じ場合、 1の場合、 A [mid] + 1を返します それ以外の場合 左:=半ば+ 1