Comment trouver tous les quadruples uniques proches de zéro en utilisant C# ?

WBOY
Libérer: 2023-09-22 15:37:02
avant
996 Les gens l'ont consulté

如何使用 C# 找到所有接近于零的唯一四元组?

Le moyen le plus simple est de créer quatre boucles imbriquées et de vérifier une par une si la somme des quatre éléments est nulle. Si la somme des quatre éléments est nulle, imprimez les éléments.

Complexité temporelle - O(n4)

- O(1)

Nous pouvons utiliser une structure de données d'ensemble non ordonnée pour stocker chaque valeur du tableau. Set offre l'avantage de rechercher des éléments en un temps O(1). Ainsi, pour chaque paire du tableau, nous chercherons la valeur négative de leur somme qui peut exister dans l'ensemble. Si un tel élément est trouvé alors nous pouvons imprimer un triplet qui sera une paire d'entiers et la valeur négative de leur somme.

Complexité temporelle - O(n 3)

Complexité spatiale - O(n)

Exemple

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);
      }
   }
}
Copier après la connexion

Sortie

[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!