>  기사  >  백엔드 개발  >  C#을 사용하여 0에 가까운 모든 고유한 4중을 찾는 방법은 무엇입니까?

C#을 사용하여 0에 가까운 모든 고유한 4중을 찾는 방법은 무엇입니까?

WBOY
WBOY앞으로
2023-09-22 15:37:02997검색

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

가장 간단한 방법은 4개의 중첩 루프를 만들고 4개 요소의 합이 모두 0인지 하나씩 확인하는 것입니다. 네 요소의 합이 0이면 요소를 인쇄합니다.

Time Complexity - O(n4)

- 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);
      }
   }
}

Output

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

위 내용은 C#을 사용하여 0에 가까운 모든 고유한 4중을 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제