给定一个数组,找到一个整数d,使得数组中的元素加上d后者减去或者不变后,数组中的元素全部相等。如果d存在输出d不存在输出-1.c++代码实现
时间: 2024-02-13 21:01:33 浏览: 63
leetcode卡-FirstMissingPositives:第一个缺失的正数
以下是C++代码实现:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
cin >> nums[i];
}
int d = -1;
sort(nums.begin(), nums.end());
if (n % 2 == 0 && nums[n / 2] == nums[n / 2 - 1]) {
d = nums[n / 2] - nums[0];
} else if (n % 2 == 1 && nums[n / 2] == nums[n / 2 + 1] && nums[n / 2] == nums[n / 2 - 1]) {
d = nums[n / 2] - nums[0];
}
for (int i = 0; i < n; ++i) {
if (nums[i] != nums[0] + i * d) {
d = -1;
break;
}
}
cout << d << endl;
return 0;
}
```
首先读入数组,然后将数组排序。如果数组长度为偶数且中间两个数相等,或者数组长度为奇数且中间的三个数都相等,那么d就等于中间数减去第一个数。最后遍历数组,如果数组中的每个数加上d后等于数组中的第一个数加上它在数组中的下标乘以d,那么满足条件;否则d不存在。
阅读全文