C++でK個の最も近い要素を検索する
並べ替えられた配列があり、2つの整数kとxも指定されているとすると、その配列内でxに最も近いk個の要素を見つける必要があります。結果は昇順で並べ替える必要があります。同点の場合は、常に小さい要素が優先されます。したがって、入力が[1,2,3,4,5]のようで、k =4、x =3の場合、出力は[1,2,3,4]
になります。これを解決するには、次の手順に従います-
- ansという配列を作成します
- 低設定:=0、高:=配列のサイズ– k
- 低い<高い
- 中:=低+(高-低)/ 2
- x – arr [mid]> arr [mid + k] – xの場合、low:=mid + 1、それ以外の場合はhigh:=mid
- 低から低+kの範囲のiの場合
- arr[i]をans配列に挿入します
- 回答を返す
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> findClosestElements(vector<int>& arr, int k, int x) { vector <int> ans; int low = 0; int high = arr.size() - k; while(low < high){ int mid = low + (high - low)/2; if(x - arr[mid] > arr[mid + k] - x){ low = mid + 1; } else high = mid; } for(int i = low ; i < low + k ; i++)ans.push_back(arr[i]); return ans; } }; main(){ Solution ob; vector<int> v = {1,2,3,4,5}; print_vector(ob.findClosestElements(v, 4, 3)); }
入力
[1,2,3,4,5] 4 3
出力
[1,2,3,4]
-
C++で汚染された二分木の要素を検索する
二分木があるとします。そのツリーのルールは次のとおりです- root.val ==0 treeNode.valがxで、treeNode.leftがnullでない場合、treeNode.left.val =2 * x + 1 treeNode.valがxで、treeNode.rightがnullでない場合、treeNode.right.val =2 * x + 2 今、二分木が汚染されているので。これは、ツリーノードのすべての値が-1に変更されたことを示します。最初にバイナリツリーを回復してから、次のようにFindElementsクラスを実装する必要があります-
-
C++の二分木で最も近い葉を見つけます
1つの二分木が与えられたとします。さまざまなレベルのリーフノードがあります。ノードを指す別のポインターが与えられます。尖ったノードから最も近いリーフノードまでの距離を見つける必要があります。ツリーが以下のようであると考えてください- ここで、リーフノードは2、-2、および6です。ポインタがノード-5を指している場合、-5から最も近いノードは距離1になります。 これを解決するために、指定されたノードをルートとするサブツリーをトラバースし、サブツリー内で最も近いリーフを見つけて、距離を保存します。ここで、ルートからツリーをトラバースします。ノードxが左側のサブツリーに存在する場合は、右側