Pythonで制限未満でXORが最大である要素のリストを見つけるプログラム
数値のリストnumsと、各クエリに[x、limit]が含まれるクエリのリストがあるとします。各クエリ[x、limit]について、e≤limitおよびeXORxが最大化されるようなnumsの要素eを見つけるようなリストを見つける必要があります。そのような要素がない場合は、-1を返します。
したがって、入力がnums =[3、5、9] querys =[[4、6]、[2、0]]の場合、最初のクエリと同様に、出力は[3、-1]になります。 numsで2または4を使用できます。 3 ^ 4 =7、5 ^ 4 =3なので、XORが大きくなる3を選択します。 2番目のクエリでは、0以下の数値はないため、-1に設定します。
これを解決するには、次の手順に従います-
-
trie:=新しいマップ
-
関数bits()を定義します。これには私がかかります
-
iの32ビットバイナリ表現を返す
-
関数の挿入を定義します。これには私がかかります
-
ノード:=トライ
-
ビット(i)の各cについて、実行
-
node:=cがノードにない場合は、その中に空のマップを挿入します
-
-
node [2]:=i
-
関数query()を定義します。これには私がかかります
-
ノード:=トライ
-
ビット(i)の各cについて、実行
-
rc:=c XOR 1
-
node:=node[rc]存在する場合はnode[c]
-
-
リターンノード[2]
-
メインの方法から、次のようにします-
-
リストを並べ替えるA
-
B:=各クエリインデックスiおよびクエリ値xとlimitの形式(i、x、limit)の要素のリスト。次に、制限に基づいて並べ替えます
-
(j、n、ans):=(0、Aのサイズ、クエリと同じサイズのリスト、-1で埋める)
-
各インデックスiと値xおよびBの制限について、実行します
-
j
-
insert(A [j])
-
j:=j + 1
-
-
jがゼロ以外の場合、
-
ans [i]:=query(x)
-
-
-
ansを返す
例(Python)
理解を深めるために、次の実装を見てみましょう-
class Solution:
def solve(self, A, queries):
trie = {}
def bits(i):
return map(int, bin(i)[2:].zfill(32))
def insert(i):
node = trie
for c in bits(i):
node = node.setdefault(c, {})
node[2] = i
def query(i):
node = trie
for c in bits(i):
rc = c ^ 1
node = node.get(rc, node.get(c))
return node[2]
A.sort()
B = sorted([(i, x, limit) for i, (x, limit) in enumerate(queries)], key=lambda x: x[2])
j, n, ans = 0, len(A), [-1] * len(queries)
for i, x, limit in B:
while j < n and A[j] <= limit:
insert(A[j])
j += 1
if j:
ans[i] = query(x)
return ans
ob = Solution()
nums = [3, 5, 9]
queries = [
[4, 6],
[2, 0]
]
print(ob.solve(nums, queries)) 入力
[3, 5, 9], [[4, 6],[2, 0]]
出力
[3, -1]
-
リスト内の要素の合計を見つけるPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力としてリストが与えられた場合、与えられたリストの合計を計算する必要があります。 ここでは、考慮すべき2つのアプローチがあります。つまり、組み込み関数を使用する方法と、ブルートフォースアプローチを使用する方法です。 アプローチ1-組み込み関数の使用 例 # main arr = [1,2,3,4,5] ans = sum(arr) print ('Sum of the array is ',ans) 出力 15 すべての変数と関数はグローバルスコープで宣言されて
-
リスト内の最大要素と最小要素の位置を見つけるPythonプログラム?
Pythonでは、最大要素、最小要素、およびそれらの位置も非常に簡単に見つけることができます。 Pythonはさまざまな組み込み関数を提供します。 min()は配列の最小値を見つけるために使用され、max()は配列の最大値を見つけるために使用されます。 index()は、要素のインデックスを見つけるために使用されます。 アルゴリズム maxminposition(A, n) /* A is a user input list and n is the size of the list.*/ Step 1: use inbuilt function for finding the positi