查找被移除的元素
公差为 1 的等差升序数列,将数列输入到程序的数组时移除了⼀个元素,导致长度为n的升序数组可能不再连续,除非被移除的是第一个或最后一个元素。需要在数组不连续时,找出被移除的元素。
【输入描述】
输入两行。第一行是数组大小 n ,第二是数组元素,用空格分开。
【输出描述】
输出若一行,输出被删除的元素。
【输入样例】
8
1 2 4 5 6 7 8 9
【输出样例】
缺失的数字是 3
【参考程序】
// 小牛编程
#include <iostream>
using namespace std;
const int MAXN = 10001;
int arr[MAXN];
// 找丢失的元素的值
int binarySearchMissing(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;
}
}
// left 和 right 都指向某个元素
return start + left;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int missNum = binarySearchMissing(arr, n);
if (missNum == arr[n - 1]) {
cout << "序列是连续的" << endl;
} else {
cout << "缺失的数字是 " << missNum << endl;
}
return 0;
}