C++の最小範囲II
整数の配列Aがあるとします。整数A[i]ごとに、x=-Kまたはx=Kのいずれかを選択し、xをA [i]に追加する必要があります(1回のみ)。したがって、このプロセスの後に、配列Bができます。Bの最大値とBの最小値の間の可能な限り最小の差を見つける必要があります。したがって、入力がA =[0,10]、K =2の場合、 B =[2,8]であるため、出力は6になります。
これを解決するには、次の手順に従います-
-
set ret:=0、n:=配列Aのサイズ
-
配列Aを並べ替える
-
set ret:=Aの最後の要素–Aの最初の要素
-
右:=A – Kの最後の要素と左:=A+kの最初の要素
-
0からn–1の範囲のiの場合
-
mx:=A [i]+kの最大値と右
-
mn:=A [i + 1]の最小値–kおよび左
-
ret:=retの最小値および(mx-分)
-
-
retを返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: int smallestRangeII(vector<int>& A, int k) { int ret = 0; int n = A.size(); sort(A.begin(), A.end()); ret = A[n - 1] - A[0]; int mx, mn; int right = A[n - 1] - k; int left = A[0] + k; for(int i = 0; i < n - 1; i++){ mx = max(A[i] + k, right); mn = min(A[i + 1] - k, left); ret = min(ret, mx - mn); } return ret; } }; main(){ vector<int> v = {0, 10}; Solution ob; cout << (ob.smallestRangeII(v, 2)); }
入力
[0,10] 2
出力
6
-
C++の範囲のセットビットをコピーします
このチュートリアルでは、指定された範囲内のある数値のセットビットを別の数値にコピーするプログラムについて説明します。 このために、2つの整数が提供されます。私たちのタスクは、最初の数値のビットを確認し、それらが指定された範囲内にある場合は、それらのビットを2番目の数値にも設定することです。最後に、生成された数字を返します。 例 #include <bits/stdc++.h> using namespace std; //copying set bits from y to x void copySetBits(unsigned &x, unsigned y, unsig
-
Pythonの最小範囲I
整数の配列Aがあるとします。ここで、整数A [i]ごとに、範囲[-KからK]の任意のxを選択し、xをA[i]に追加できます。このプロセスの後、配列Bができました。Bの最大値とBの最小値の差を可能な限り小さくする必要があります。 したがって、入力がA =[0,10]、K =2の場合、B =[2,8] として、出力は6になります。 これを解決するには、次の手順に従います- MAX:=(Aの最大値)-K MIN:=(Aの最小値)+ K 違い:=MAX-MIN 差<0がゼロ以外の場合、 0を返す それ以外の場合は差額を返します 理解を深めるために、次の実装を見てみましょう- 例