假设我们有一个按顺序表示几何级数元素的数组。缺少一个要素。我们必须找到缺失的元素。因此,如果arr = [1、3、27、81],则输出为9,因为缺少9。
使用二进制搜索,我们可以解决这个问题。我们将转到中间元素,然后检查中间和紧挨中间的比率是否与常用比率相同。如果不是,则在索引mid和mid + 1之间存在丢失的元素。如果中间元素是GP中的第n / 2个元素,则丢失的元素位于右半部分,否则位于左半部分。
#include <iostream> #include <cmath> using namespace std; class Progression { public: int missingUtil(int arr[], int left, int right, int ratio) { if (right <= left) return INT_MAX; int mid = left + (right - left) / 2; if (arr[mid + 1] - arr[mid] != ratio) return (arr[mid] * ratio); if (mid > 0 && arr[mid] / arr[mid - 1] != ratio) return (arr[mid - 1] * ratio); if (arr[mid] == arr[0] * pow(ratio, mid)) return missingUtil(arr, mid + 1, right, ratio); return missingUtil(arr, left, mid - 1, ratio); } int missingElement(int arr[], int n) { int ratio = pow(arr[n-1]/arr[0], 1.0/n); return missingUtil(arr, 0, n - 1, ratio); } }; int main() { Progression pg; int arr[] = {1, 3, 27, 81}; int n = sizeof(arr) / sizeof(arr[0]); cout << "The missing element is: " << pg.missingElement(arr, n); }
输出结果
The missing element is: 9