C++の配列内の2つの数値の最大XOR
空でない数値の配列a0、a1、a2、…、an-1があるとします。ここで、0≤ai<231です。aiの最大の結果を見つける必要があります。 XOR aj、ここで0≤i、j
これを解決するには、次の手順に従います-
insertNode()を定義します。これにはvalとheadが必要です
curr:=ヘッド
31から0の範囲のiの場合
ビット:=val /(2 ^ i)AND 1
currのchild[bit]がnullの場合、currのchild [bit]:=new node
curr:=currの子[ビット]
find()メソッドを定義します。これは、入力としてvalとheadを取ります
curr:=ヘッド、ans:=0
31から0の範囲のiの場合
ビット:=val /(2 ^ i)AND 1
currのchild[bit]がnullの場合、ans:=ans OR(2 ^ 1)/ p>
curr:=currの子[ビット]
ansを返す
メインの方法から、次のようにします-
ans:=0
n:=numsのサイズ
ヘッド:=新しいノード
0からn– 1の範囲のiの場合、insertNode(nums [i]、head)
0からn– 1の範囲のiの場合、ans:=ansの最大値と検索(nums [i]、head)
ansを返す
理解を深めるために、次の実装を見てみましょう-
例(C ++)
#include <bits/stdc++.h>
using namespace std;
struct Node{
Node* child[2];
Node(){
child[1] = child[0] = NULL;
}
};
class Solution {
public:
void insertNode(int val, Node* head){
Node* curr = head;
for(int i = 31; i>= 0; i--){
int bit = (val >> i) & 1;
if(!curr->child[bit]){
curr->child[bit] = new Node();
}
curr = curr->child[bit];
}
}
int find(int val, Node* head){
Node* curr = head;
int ans = 0;
for(int i = 31; i>= 0; i--){
int bit = (val >> i) & 1;
if(curr->child[!bit]){
ans |= (1 << i);
curr = curr->child[!bit];
} else {
curr = curr->child[bit];
}
}
return ans;
}
int findMaximumXOR(vector<int>& nums) {
int ans = 0;
int n = nums.size();
Node* head = new Node();
for(int i = 0; i < n; i++){
insertNode(nums[i], head);
}
for(int i = 0; i < n; i++){
ans = max(ans, find(nums[i], head));
}
return ans;
}
};
main(){
vector<int> v = {3,10,5,25,2,8};
Solution ob;
cout << (ob.findMaximumXOR(v));
}
[3,10,5,25,2,8]
出力
28
-
2つ以上(または配列)の数値のGCD0のC++プログラム?
ここでは、3つ以上の数値の公約数を取得する方法を説明します。 2つの数値の公約数を見つけるのは簡単です。 3つ以上の数値のgcdを見つけたい場合は、gcdの結合法則に従う必要があります。たとえば、{w、x、y、z}のgcdを検索する場合は、{gcd(w、x)、y、z}、次に{gcd(gcd(w、x)、y)になります。 、z}、最後に{gcd(gcd(gcd(w、x)、y)、z)}。アレイを使用すると、非常に簡単に実行できます。 アルゴリズム gcd(a、b) begin if a is 0, then return b &n
-
2つの数値を交換するC++プログラム
2つの数値を交換するプログラムを作成する方法は2つあります。 1つは一時変数を使用することを含み、2番目の方法は3番目の変数を使用しません。これらは次のように詳細に説明されています- 一時変数を使用して2つの数値を交換するプログラム 一時変数を使用して2つの数値を交換するプログラムは次のとおりです。 例 #include <iostream > using namespace std; int main() { int a = 10, b = 5, temp; temp = a; a = b; &nbs