11617 查找首次出现的位置 二分

解决思路

 
  • 读取输入:读取数组和查询数。
 
  • 二分查找:对每个查询数进行二分查找,找到其在数组中第一次出现的位置。
 
  • 输出结果:输出每个查询数在数组中第一次出现的位置。
    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N = 1e6 + 10;
    int a[N];
    int n, x;
    
    int main() {
        // 读取数组元素个数
        cin >> n;
        for (int i = 1; i <= n; i++) {
            scanf("%d", &a[i]);
        }
        
        // 读取查询数个数
        int q;
        cin >> q;
        
        while (q--) {
            cin >> x;
            int L = 1, R = n, ans = -1;
            
            // 二分查找
            while (L <= R) {
                int mid = (L + R) / 2;
                if (a[mid] == x) {
                    ans = mid;
                    R = mid - 1; // 继续向左查找
                } else if (a[mid] < x) {
                    L = mid + 1;
                } else {
                    R = mid - 1;
                }
            }
            
            // 输出结果
            if (ans != -1) {
                cout << ans << " ";
            } else {
                cout << -1 << " ";
            }
        }
        
        return 0;
    }

     

posted @ 2024-09-30 16:52  CRt0729  阅读(24)  评论(0编辑  收藏  举报