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
-
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, '='
-
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&