Pythonの配列から要素を使用して最大XORを見つけるプログラム
負でない値を持つnumsという配列があるとします。また、querys [i]がペア(xi、mi)を持つquerysという別の配列もあります。 i番目のクエリの答えは、xiの最大ビット単位XOR値と、mi以下のnumsの要素です。 numsのすべての要素がmiより大きい場合、答えは-1です。したがって、答えのサイズがクエリのサイズと同じで、answer[i]がi番目のクエリの答えである配列の答えを見つける必要があります。
したがって、入力がnums =[0,1,2,3,4]クエリ=[[3,1]、[1,3]、[5,6]]の場合、出力は[3、 3,7]、なぜなら
-
0と1は1以下です。0XOR3=3と1XOR3 =2、ここではこれら2つのうち大きい方が3です。
-
1 XOR2=3。
-
5 XOR2=7。
これを解決するには、次の手順に従います-
-
m:=numsのサイズ
-
n:=クエリのサイズ
-
クエリ=インデックスiごとにトリプレット(i、x、制限)を作成し、クエリでペア(x、制限)を作成します
-
制限に基づいてクエリを並べ替える
-
nums:=リストを並べ替えるnums
-
res:=サイズnの配列で、0で埋める
-
31から0の範囲のkの場合、1ずつ減らします。
-
プレフィックス:=新しいセット
-
j:=0
-
クエリの各インデックスiと値(x、limit)について、実行します
-
j<=m-1およびnums[j]<=制限、実行
-
nums [j]を右kビットにシフトし、プレフィックスに挿入します
-
j:=j + 1
-
-
プレフィックスが空の場合、
-
res [i]:=-1
-
-
それ以外の場合
-
res [i] =res [i]/2の商
-
ターゲット:=res [i] XOR 1
-
(kビットを右にシフトした後のx)XORターゲットがプレフィックスにある場合、
-
res [i]:=target
-
-
-
-
-
解像度を返す
例
理解を深めるために、次の実装を見てみましょう
def solve(nums, queries): m, n = len(nums), len(queries) queries = sorted(((i, x, limit) for i, (x, limit) in enumerate(queries)), key=lambda x: x[2]) nums = sorted(nums) res = [0] * n for k in range(31, -1, -1): prefixes = set() j = 0 for i, x, limit in queries: while j <= m - 1 and nums[j] <= limit: prefixes.add(nums[j] >> k) j += 1 if not prefixes: res[i] = -1 else: res[i] <<= 1 target = res[i] ^ 1 if (x >> k) ^ target in prefixes: res[i] = target return res nums = [0,1,2,3,4] queries = [[3,1],[1,3],[5,6]] print(solve(nums, queries))
入力
[0,1,2,3,4], [[3,1],[1,3],[5,6]]
出力
[3, 3, 7]
-
配列内の最大の要素を見つけるPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、配列の最大要素を計算する必要があります。 ここでは、ループ全体をトラバースして最大の要素を計算し、要素を取得するブルートフォースアプローチを使用します。 以下の実装を観察できます。 例 # largest function def largest(arr,n): #maximum element max = arr[0] # traverse the whole loop for
-
配列内の最大の要素を見つけるPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列を指定すると、配列内で最大の要素を見つける必要があります。 アプローチ maxを最初の要素として初期化します。 この後、指定された配列を2番目の要素から最後までトラバースします。 トラバースされたすべての要素について、現在のmaxの値と比較します maxより大きい場合、maxが更新されます。 それ以外の場合、ステートメントはを超えます 以下の実装を見てみましょう- 例 def largest(arr,n): #maximal element