複数の整数を含むリストがあるとします。配列内の各値のペア間の差を見つけて、k 番目に小さい差の数を見つける必要があります。インデックスは 0 から始まり、値 k が入力として与えられます。
したがって、入力が数値 = {2, 6, 4, 8}、k = 2 のような場合、出力は 2 になります。
2 つのペアの差は -
(2, 6) = 4
(2, 4) = 2
(2, 8) です。 ) = 6(6, 4) = 2
(6, 8) = 2
(4, 8) = 4
次の場合値を並べ替えると、2、2、2、4、4、6となります。 2 番目の最小値は 2 です。 (からインデックス付け 0)。
この問題を解決するには、次の手順に従います。
#include<bits/stdc++.h> using namespace std; int solve(vector<int>& input, int k) { k++; sort(input.begin(), input.end()); int le = 0; int ri = input.back() - input[0]; while (le < ri) { int mid = (le + ri) / 2; long long tmp = 0; int lp = 0; for (int i = 1; i < input.size(); i++) { while (input[i] - input[lp] > mid) lp++; tmp += i - lp; } if (tmp >= k) ri = mid; else le = mid + 1; } return le; } int main() { vector<int> numbers = {2, 6, 4, 8}; cout<< solve(numbers, 2) <<endl; return 0; }
入力
vector<int> numbers = {2, 6, 4, 8}; cout<< solve(numbers, 2) <<endl;
2
以上がC++ でプログラムを作成し、配列内の要素のすべてのペアの間で k 番目に小さい差を見つけます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。