Nicole • 29天前
// 二分查找,找到元素第一次出现的位置 int binarySearchFirst(int arr[], int n, int x) {
int left = 0, right = n - 1;
int result = -1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == x) {
result = mid; // 记录找到的位置
right = mid - 1; // 继续在左半部分查找,看是否有更早出现的位置
} else if (arr[mid] < x) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return result;
}
int main() {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int x;
scanf("%d", &x);
int position = binarySearchFirst(arr, n, x);
// 注意题目要求的位置是从1开始计数,而数组下标从0开始
if (position != -1) {
printf("%d\n", position + 1);
} else {
printf("-1\n");
}
return 0;
}
评论:
请先登录,才能进行评论