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

C#を使用してゼロに近いすべての一意の4つ組を見つける方法は?


簡単なアプローチは、4つのネストされたループを作成し、4つの要素すべての合計がゼロかどうかを1つずつ確認することです。 4つの要素の合計がゼロの場合は、要素を出力します。

時間計算量 − o(n 4

スペースの複雑さ − o(1)

順序付けされていないセットデータ構造を使用して、配列の各値を格納できます。 Setには、O(1)時間で要素を検索するという利点があります。したがって、配列内の各ペアについて、セットに存在する可能性のあるそれらの合計の負の値を探します。そのような要素が見つかった場合、整数のペアとそれらの合計の負の値になるトリプレットを出力できます。

時間計算量 − o(n 3

スペースの複雑さ − o(n)

public class Arrays{
   public List<List<int>> FourSum(int[] nums){
      List<List<int>> res = new List<List<int>>();
      if (nums == null || nums.Length == 0){
         return null;
      }
      int[] newNums = nums.OrderBy(x => x).ToArray();
      for (int i = 0; i < newNums.Length; i++){
         for (int j = i; j < newNums.Length; j++){
            int left = j + 1;
            int right = newNums.Length - 1;
            while (left < right){
               int sum = newNums[i] + newNums[j] + newNums[left] + newNums[right];
               if (sum == 0){
                  List<int> sums = new List<int>();
                  sums.Add(newNums[i]);
                  sums.Add(newNums[j]);
                  sums.Add(newNums[left]);
                  sums.Add(newNums[right]);
                  res.Add(sums);
                  int leftValue = newNums[left];
                  int rightValue = newNums[right];
                  while (left < nums.Length && leftValue == nums[left]){
                     left++;
                  }
                  while (right > left && right == nums[right]){
                     right--;
                  }
               }
               else if (sum < 0){
                  left++;
               }
               else{
                  right--;
               }
            }
            while (j + 1 < nums.Length && nums[j] == nums[j + 1]){
               j++;
            }
         }
         while (i + 1 < nums.Length && nums[i] == nums[i + 1]){
            i++;
         }
      }
      return res;
   }
}

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

出力

[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

  1. Numpyを使用して特定の行列のすべての要素の合計を見つける方法は?

    このプログラムでは、numpyライブラリのsum()関数を使用して、numpy行列のすべての項を追加します。最初にランダムなnumpy行列を作成し、次にすべての要素の合計を取得します。 アルゴリズム ステップ1:numpyをインポートします。ステップ2:random()関数を使用してランダムなm×n行列を作成します。ステップ3:sum()関数を使用して行列内のすべての要素の合計を取得します。 サンプルコード import numpy as npmatrix =np.random.rand(3,3)print( numpyマトリックスは:\ n、matrix)print( \ nマトリックスの

  2. Pythonを使用して開いているすべてのファイルを閉じる方法は?

    Pythonには、開いているすべてのファイルをネイティブに追跡する方法はありません。これを行うには、すべてのファイルを自分で追跡するか、常にwithステートメントを使用してファイルを開き、スコープ外になるかエラーが発生したときにファイルを自動的に閉じます。 例 with open('file.txt') as f:     # do something with f here すべてのファイルを囲むクラスを作成し、すべてのファイルを閉じる単一の閉じる関数を作成することもできます。 例 class OpenFiles():     def