C#を使用して合計ゼロになるすべての一意のトリプレットを見つける方法は?
簡単なアプローチは、3つのネストされたループを作成し、3つの要素すべての合計がゼロかどうかを1つずつ確認することです。 3つの要素の合計がゼロの場合は、要素を出力します。
時間計算量 − o(n 3 )
スペースの複雑さ − o(1)
順序付けされていないセットデータ構造を使用して、配列の各値を格納できます。 Setには、O(1)時間で要素を検索するという利点があります。したがって、配列内の各ペアについて、セットに存在する可能性のあるそれらの合計の負の値を探します。そのような要素が見つかった場合、整数のペアとそれらの合計の負の値になるトリプレットを出力できます。
時間計算量 − o(n 2 )
スペースの複雑さ − o(n)
public class Arrays{ public List<List<int>> ThreeSum(int[] nums){ List<List<int>> res = new List<List<int>>(); if (nums == null || nums.Length == 0){ return res; } var newnums = nums.OrderBy(x => x).ToArray(); for (int i = 0; i < newnums.Count(); i++){ int left = i + 1; int right = newnums.Count() - 1; while (left < right){ int sum = newnums[i] + newnums[left] + newnums[right]; if (sum == 0){ List<int> l = new List<int>(); l.Add(newnums[i]); l.Add(newnums[left]); l.Add(newnums[right]); res.Add(l); int leftValue = newnums[left]; while (left < newnums.Length && leftValue == newnums[left]){ left++; } int riightValue = newnums[right]; while (right > left && riightValue == newnums[right]){ right--; } } else if (sum < 0){ left++; } else{ right--; } } while (i + 1 < newnums.Length && newnums[i] == newnums[i + 1]){ i++; } } return res; } } static void Main(string[] args){ Arrays s = new Arrays(); int[] nums = { -1, 0, 1, 2, -1, -4 }; var ss = s.ThreeSum(nums); foreach (var item in ss){ foreach (var item1 in item){ Console.WriteLine(item1); } } }
出力
[[-1,-1,2],[-1,,0,1]]
-
Pythonで指定された合計を持つリスト内のすべてのトリプレットを検索します
数字のリストで、特定の合計を与えるためにどの3つの要素を結合できるかを調べたいと思います。これをトリプレットと呼びます。そして、リストにはそのようなトリプレットがたくさんある可能性があります。たとえば、合計10は、1、6、3および1、5、4のフォーム番号で生成できます。この記事では、与えられた数のリストからそのようなすべてのトリプレットを見つける方法を見ていきます。 範囲変数と一時変数の使用 これは、一時変数を作成する従来のアプローチです。これらの変数はリストの要素を保持し、それらの合計が必要な値に等しいかどうかを確認します。その後、そのような変数を最終結果セットに蓄積し続けます。 例 de
-
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&