3C++で最も近い
n個の整数と1つのターゲットを持つ配列numがあるとします。合計がターゲットに最も近くなるように、numsで3つの整数を見つける必要があります。 3つの整数の合計を返します。各入力には正確に1つのソリューションがあるという1つの仮定をとることができます。したがって、指定された配列が[-1,2,1、-4]のようで、ターゲットが1の場合、トリプレットは[-1,2,1]になり、これは最も近い合計、つまり2になります。
>これを解決するには、次の手順に従います-
- 配列nums、ans:=0、diff:=Infinity、n:=numsのサイズを並べ替えます
- 0からn–1の範囲のiの場合
- 左:=i + 1、右:=n – 1
- 左<右
- temp:=nums [left] + nums [right] + nums [i]
- if | target – temp |
- temp =targetの場合は、tempを返します。それ以外の場合は、temp> targetの場合は、右に1ずつ減らし、それ以外の場合は、左に1ずつ増やします。
- 回答を返す
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); int ans = 0; int diff = INT_MAX; int n = nums.size(); for(int i = 0; i < n; i++){ int left = i + 1; int right = n - 1; while(left < right){ int temp = nums[left] + nums[right] + nums[i]; if(abs(target - temp) < diff){ ans = temp; diff = abs(target - temp); } if(temp == target)return temp; else if(temp > target) right--; else left++; } } return ans; } }; main(){ Solution ob; vector<int> v = {-1,2,1,-4}; cout << ob.threeSumClosest(v, 1); }
入力
[-1,2,1,-4] 1
出力
2
-
C ++の製品配列パズル(O(1)スペース)?
ここでは、配列に関連する1つの興味深い問題を確認します。 n個の要素を持つ配列があります。 n個の要素の別の配列を作成する必要があります。ただし、2番目の配列のi番目の位置は、i番目の要素を除く最初の配列のすべての要素の積を保持します。そして、1つの制約は、この問題では除算演算子を使用できないことです。追加のスペースを使用せずに、この問題をインプレースで解決する必要があります。 除算、演算を使用できれば、すべての要素の積を取得し、最初の配列のi番目の要素を除算して、2番目の配列のi番目の場所に格納することで、この問題を簡単に解決できます。 ここでは、1つの一時変数、つまり左部分と右部分の積
-
C++での組み合わせ
2つの整数nとkがあるとします。 1...nからk個の可能なすべての組み合わせを見つける必要があります。したがって、n=4およびk=2の場合、組み合わせは[[1,2]、[1,3]、[1,4]、[2,3]、[2,4]、[3,4 ]] これを解決するには、次の手順に従います- これを解決するために再帰関数を使用します。関数solve()は、n、k、一時配列を取得して開始します。開始は最初は1です。これは次のように動作します temp配列のサイズ=kの場合、tempをres配列に挿入し、戻ります for i:=start to n、 iを一時的に挿入 solve(n、k、temp、i + 1