C++でサイズが不明なソートされた配列を検索する
配列があり、昇順で並べ替えられているとすると、ターゲットをnumsで検索する関数を定義する必要があります。ターゲットが存在する場合はそのインデックスを返し、そうでない場合は-1を返します。
アレイのサイズは不明です。 ArrayReaderインターフェイスを使用してのみ配列にアクセスできます。 ArrayReader.get(k)のようなget関数があり、これはインデックスkにある配列の要素を返します。
したがって、入力がarray =[-1,0,3,5,9,12]、target =9の場合、9がnumsに存在し、そのインデックスが4であるため、出力は4になります。
これを解決するには、次の手順に従います-
-
高:=1、低:=0
-
リーダーのget(high)
-
低:=高
-
高=高*2
-
-
低い<=高い間、実行-
-
中:=低+(高-低)/ 2
-
x:=リーダーのget(mid)
-
xがターゲットと同じ場合、-
-
途中で戻る
-
-
x>ターゲットの場合、-
-
高:=中-1
-
-
それ以外の場合
-
低:=中+ 1
-
-
-
-1を返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class ArrayReader{ private: vector<int> v; public: ArrayReader(vector<int> &v){ this->v = v; } int get(int i){ return v[i]; } }; class Solution { public: int search(ArrayReader& reader, int target) { int high = 1; int low = 0; while (reader.get(high) < target) { low = high; high <<= 1; } while (low <= high) { int mid = low + (high - low) / 2; int x = reader.get(mid); if (x == target) return mid; if (x > target) { high = mid - 1; } else low = mid + 1; } return -1; } }; main(){ Solution ob; vector<int> v = {-1,0,3,5,9,12}; ArrayReader reader(v); cout<<(ob.search(reader, 9)); }
入力
{-1,0,3,5,9,12}, 9
出力
4
-
ソートされたリストをC++でバイナリ検索ツリーに変換する
要素が昇順でソートされている単一リンクリストがあるとすると、それを高さバランスのとれたBSTに変換する必要があります。したがって、リストが[-10、-3、0、5、9]のような場合、可能なツリーは-のようになります。 これを解決するには、次の手順に従います- リストが空の場合は、nullを返します sortListToBST()と呼ばれる再帰メソッドを定義します。これにより、リストの開始ノードが取得されます x:=リストaからの中間ノードの前のノードのアドレス mid:=正確なミッドノード midの値から取得して、値を持つ新しいノードを作成します ne
-
C ++のアレイディケイとは何ですか?
アレイのタイプと次元の喪失は、アレイの減衰として知られています。これは、ポインタまたは値によって配列を関数に渡すときに発生します。最初のアドレスは、ポインタである配列に送信されます。そのため、配列のサイズは元のサイズではありません。 これは、C++言語での配列減衰の例です 例 #include<iostream> using namespace std; void DisplayValue(int *p) { cout << "New size of array by passing the value : "; &nbs