💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 检查是否可以从给定数组形成算术级数 > 原文: [https://www.geeksforgeeks.org/check-whether-arithmetic-progression-can-formed-given-array/](https://www.geeksforgeeks.org/check-whether-arithmetic-progression-can-formed-given-array/) 给定 **n** 个整数的数组。 任务是检查是否可以使用所有给定元素形成算术级数。 如果可能,打印“是”,否则打印“否”。 **示例**: ``` Input : arr[] = {0, 12, 4, 8} Output : Yes Rearrange given array as {0, 4, 8, 12} which forms an arithmetic progression. Input : arr[] = {12, 40, 11, 20} Output : No ``` **方法 1(简单)** 一个简单的解决方案是先找到最小的元素,然后找到第二个最小的元素,然后找出这两者之间的差。 将此差设为 d。 找到差异后,找到第三最小,第四最小,依此类推。 在找到每第 i 个最小的最小值(从第 3 个开始)之后,找到当前元素的值与前一个元素的值之间的差。 如果差异与 d 不同,则返回 false。 如果所有元素都相同,则返回 true。 该解决方案的时间复杂度为 `O(n^2)` **方法 2(使用排序)** 这个想法是对给定的数组进行排序。 排序后,检查连续元素之间的差异是否相同。 如果所有差异都相同,则可以进行算术级数运算。 以下是此方法的实现: ## C++ ```cpp // C++ program to check if a given array // can form arithmetic progression #include<bits/stdc++.h> using namespace std; // Returns true if a permutation of arr[0..n-1] // can form arithmetic progression bool checkIsAP(int arr[], int n) {   if (n == 1)     return true;   // Sort array   sort(arr, arr + n);   // After sorting, difference between   // consecutive elements must be same.   int d = arr[1] - arr[0];   for (int i=2; i<n; i++)     if (arr[i] - arr[i-1] != d)       return false;   return true; } // Driven Program int main() {   int arr[] = { 20, 15, 5, 0, 10 };   int n = sizeof(arr)/sizeof(arr[0]);   (checkIsAP(arr, n))? (cout << "Yes" << endl) :                        (cout << "No" << endl);   return 0; } ```