公差为 1 的等差升序数列,将数列输入到程序的数组时移除了⼀个元素,导致长度为n的升序数组可能不再连续,除非被移除的是第一个或最后一个元素。需要在数组不连续时,找出被移除的元素。
【输入描述】
输入两行。第一行是数组大小 n ,第二是数组元素,用空格分开。
【输出描述】
输出若一行,输出被删除的元素。
【输入样例】
8
1 2 4 5 6 7 8 9
【输出样例】
缺失的数字是 3
【参考程序】
// 爱码岛编程
#include <bits/stdc++.h>
using namespace std;
int n = 8;
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
int findMissing(int arr[], int n) {
int left = 0;
int right = n - 1;
int start = arr[0];
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == start + mid) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return start + left;
}
int main() {
int result = findMissing(arr, n);
if (result == arr[n - 1] + 1) {
cout << "序列是连续的" << endl;
} else {
cout << result << endl;
}
return 0;
}