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