我有以下代码:
int[] arr = { 1, 2, 3, 4 };
int n = arr.Length;
bool result = areConsecutives(arr, n);
if (result == true)
MessageBox.Show("Yes");
else
MessageBox.Show("No");
static bool areConsecutives(int[] arr, int n)
{
int first_term = int.MaxValue;
for (int j = 0; j < n; j++)
{
if (arr[j] < first_term)
first_term = arr[j];
}
int ap_sum = (n * (2 * first_term + (n - 1) * 1)) / 2;
int arr_sum = 0;
for (int i = 0; i < n; i++)
arr_sum += arr[i];
return ap_sum == arr_sum;
}
Run Code Online (Sandbox Code Playgroud)
即使我将数组更改为:
int[] arr = { 4, 2, 1, 3 }
Run Code Online (Sandbox Code Playgroud)
问题/问题是我可以做些什么来检查数组元素是否连续,例如,如果我有以下数组:
int[] arr = { 4, 8, 12, 16 }
Run Code Online (Sandbox Code Playgroud)
它们是连续的/乘以 4 并且数组也可以是这样的:
int[] arr = { 16, 4, 8, 12 }
Run Code Online (Sandbox Code Playgroud)
这是一种方法:
var vals = new[] { 125, 25, 50, 75, 100 };
Array.Sort(vals);
bool arithmetic = vals.Zip(vals.Skip(1), (x, y) => y - x).Distinct().Count() == 1;
Run Code Online (Sandbox Code Playgroud)
我们首先对数组进行排序。然后我们取每对元素(取 25 和 50,然后取 50 和 75 等)并找出它们之间的差异。然后我们取我们发现的不同差异的数量,看看它是否为 1:如果是,我们的元素是均匀分布的。
这是另一个:
var vals = new[] { 125, 50, 75, 100 };
Array.Sort(vals);
bool areArithmetic = true;
if (vals.Length > 1)
{
int difference = vals[1] - vals[0];
for (int i = 2; i < vals.Length; i++)
{
if (vals[i] != vals[0] + i * difference)
{
areArithmetic = false;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里我们再次对列表进行排序,然后循环遍历排序后的列表。我们找到前两个元素之间的差异,然后检查每个后续元素是否是该差异的适当倍数。
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |