ds

Nicole  •  29天前


include <stdio.h>

// 二分查找,找到元素第一次出现的位置 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;

}


评论:

请先登录,才能进行评论