C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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ずつ増やします。
  • 回答を返す
例(C ++)

理解を深めるために、次の実装を見てみましょう-

#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

  1. C ++の製品配列パズル(O(1)スペース)?

    ここでは、配列に関連する1つの興味深い問題を確認します。 n個の要素を持つ配列があります。 n個の要素の別の配列を作成する必要があります。ただし、2番目の配列のi番目の位置は、i番目の要素を除く最初の配列のすべての要素の積を保持します。そして、1つの制約は、この問題では除算演算子を使用できないことです。追加のスペースを使用せずに、この問題をインプレースで解決する必要があります。 除算、演算を使用できれば、すべての要素の積を取得し、最初の配列のi番目の要素を除算して、2番目の配列のi番目の場所に格納することで、この問題を簡単に解決できます。 ここでは、1つの一時変数、つまり左部分と右部分の積

  2. 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