Pythonのクエリから最も近い部屋を見つけるプログラム
部屋と呼ばれる配列があるとします。ここで、rooms [i]にはペア[roomId_i、size_i]が含まれ、IDがroomId_i、サイズがsize_iの部屋を示します。すべての部屋番号は異なります。また、別の配列クエリがあり、querys [j]にはペア[preferred_j、minSize_j]が含まれています。 j番目のクエリに対する答えは、次のような部屋の部屋番号IDです-
-
部屋のサイズは少なくともminSize_jであり、
-
| id --preferred_j |最小化されます。
ここで、絶対差に同点がある場合は、IDが最小の部屋を使用します。そのような部屋がない場合は、-1を返します。したがって、j番目のクエリに対する回答を含む、クエリと同じ長さのanswerという配列を見つける必要があります。
したがって、入力が部屋のようである場合=[[2,2]、[1,2]、[3,2]]クエリ=[[3,1]、[3,3]、[5,2]]、
であるため、出力は[3、-1、3]になります。-
クエリ[3,1]の場合:| 3-3 |であるため、部屋3が最も近くにあります。 =0で、サイズ2は少なくとも1なので、答えは3です。
-
クエリ[3,3]の場合:サイズが3以上の部屋はないため、答えは-1です。
-
クエリ[5,2]の場合:| 3-5 |であるため、部屋3が最も近くにあります。 =2で、サイズ2は少なくとも2なので、答えは3です。
これを解決するには、次の手順に従います-
-
サイズに基づいて部屋を並べ替えます。サイズが同じ場合は、部屋IDに基づいて並べ替えます
-
クエリ=インデックスiのペア(qid、size、i)のリスト、およびクエリのペア(qid、size)
-
サイズに基づいてクエリを逆の順序で並べ替えます。サイズが同じ場合は優先に基づいて、両方が同じ場合はインデックスに基づいて
-
ans:=クエリのサイズと同じサイズの配列で、-1で埋めます
-
X:=新しいリスト
-
クエリの各(qid、size、i)について、実行します
-
部屋と部屋の最後のアイテムのサイズ>=サイズ、実行
-
(idr、p):=部屋から最後の要素を削除
-
idrを挿入した後にXを並べ替える
-
-
Xが空でない場合は、
-
j:=Xソートを維持するためにqidを挿入する場所のインデックス
-
jがXのサイズと同じである場合、
-
ans [i]:=Xの最後の要素
-
-
それ以外の場合、jが0と同じ場合、
-
ans [i]:=X [0]
-
-
それ以外の場合
-
X [j] --qid
-
ans [i]:=X [j]
-
-
それ以外の場合
-
ans [i]:=X [j-1]
-
-
-
-
-
ansを返す
例
理解を深めるために、次の実装を見てみましょう
import bisect def solve(rooms, queries): rooms.sort(key = lambda x: (x[1], x[0])) queries = [(qid,size,i) for i, (qid, size) in enumerate(queries)] queries.sort(key = lambda x: (x[1], x[0], x[2]), reverse = True) ans = [-1] * len(queries) X = [] for qid, size, i in queries: while rooms and rooms[-1][1] >= size: idr, _ = rooms.pop() bisect.insort(X, idr) if X: j = bisect.bisect(X, qid) if j == len(X): ans[i] = X[-1] elif j == 0: ans[i] = X[0] else: if X[j] - qid < qid - X[j-1]: ans[i] = X[j] else: ans[i] = X[j-1] return ans rooms = [[2,2],[1,2],[3,2]] queries = [[3,1],[3,3],[5,2]] print(solve(rooms, queries))
入力
[[2,2],[1,2],[3,2]], [[3,1],[3,3],[5,2]]
出力
[3, -1, 3]
-
2つのソートされた配列から最も近いペアを見つけるためのPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − 2つの配列が与えられたので、2つのソートされた配列から最も近いペアを見つける必要があります 次に、以下の実装のソリューションを見てみましょう- 例 # sys module import sys # pair def print_(ar1, ar2, m, n, x): # difference diff=sys.maxsize # index l = 0 r = n-1 &
-
リストからN個の最大の要素を見つけるPythonプログラム
整数リストが与えられた場合、私たちのタスクはリスト内で最大のN個の要素を見つけることです。 例 Input : [40, 5, 10, 20, 9] N = 2 Output: [40, 20] アルゴリズム Step1: Input an integer list and the number of largest number. Step2: First traverse the list up to N times. Step3: Each traverse find the largest value and store it in a new list. 例 def Nnumbere