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

C#を使用してターゲットに近い4つ組を見つける方法は?


2つのポインターのパターンであり、4つ組のSumtoZeroに似ています。同様のアプローチに従って、一度に1つの数値を取得して、配列を反復処理できます。すべてのステップで、4つ組とターゲット数の差を保存し、各ステップでこれまでの最小のターゲット差と比較して、最終的に最も近い合計の3つ組を返すことができます。

時間計算量

配列の並べ替えにはO(N * logN)が必要です。全体として、fourSumClosest()はO(N * logN + N ^ 3)を取ります。これは、漸近的にO(N ^ 3)と同等です。

スペースの複雑さ

上記のアルゴリズムのスペースの複雑さは、ソートに必要なO(N)になります。

public class Arrays{
   public int FourSumClosestToTarget(int[] nums, int target){
      if (nums == null || nums.Length == 0){
         return -1;
      }
      int[] newNums = nums.OrderBy(x => x).ToArray();
      int initialSum = newNums[0] + newNums[1] + newNums[2] + newNums[3];
      for (int i = 0; i < nums.Length; i++){
         for (int j = i; j < nums.Length; j++){
            int left = j + 1;
            int right = nums.Length - 1;
            while (left < right){
               int nearestSum = newNums[i] + newNums[j] + newNums[left] + newNums[right];
               if (nearestSum < initialSum){
                  initialSum = nearestSum;
               }
               if (nearestSum == target){
                  return nearestSum;
               }
               else if (nearestSum < target){
                  left++;
               }
               else{
                  right--;
               }
            }
         }
      }
     return initialSum;
   }
}

static void Main(string[] args){
   Arrays s = new Arrays();
   int[] nums = { 1,0,-1,0,-2,2 };
   var ss = FourSumClosestToTarget(nums,0);
   Console.WriteLine(ss);
}

出力

0

  1. Pythonを使用して数値の階乗を見つける方法は?

    数値の階乗は、1とそれ自体の間のすべての整数の積です。与えられた数の階乗を見つけるために、1からそれ自体までの範囲でforループを形成しましょう。 range()関数は停止値を除外することに注意してください。したがって、停止値は入力数より1大きい値にする必要があります。 範囲内の各数値は、1に初期化される変数fで累積的に乗算されます 例 num=int(input('enter a number')) f=1 for i in range(1,num+1):   f=f*i print ('factorial of', num, '='

  2. Pythonを使用して自然数の合計を見つける方法は?

    whileループを使用すると、変数iの値を1ずつ連続してインクリメントし、累積的に追加できます。 s,i=0,0 n=10 while i<n:    i=i+1    s=s+i print ("sum of first 10 natural numbers",s) forループは、自然数の範囲をループして累積的に加算するためにも使用されます。 s=0 for i in range(11):    s=s+i print ("sum of first 10 natural numbers&