1. 程式人生 > 其它 >演算法筆記-問題 A: 找x

演算法筆記-問題 A: 找x

技術標籤:二分法

問題 A: 找x

題目描述

輸入一個數n,然後輸入n個數值各不相同,再輸入一個值x,輸出這個值在這個陣列中的下標(從0開始,若不在陣列中則輸出-1)。

輸入

測試資料有多組,輸入n(1<=n<=200),接著輸入n個數,然後輸入x。

輸出

對於每組輸入,請輸出結果。

樣例輸入Copy

4
1 2 3 4
3

樣例輸出 Copy

2

程式碼:

#include <bits/stdc++.h>

using namespace std;

int binareSearch(vector<int> &nums, int low, int high, int x){
    while(low <= high){
        int mid = (low + high) / 2;
        if(nums[mid] == x) return mid;
        else if(nums[mid] < x)
            low = mid + 1;
        else high = mid - 1;
    }
    return -1;
}

int main() {
    int n;
    while(scanf("%d", &n)!=EOF){
        vector<int> nums;
        for(int i=0; i<n; i++){
            int a;
            scanf("%d", &a);
            nums.push_back(a);
        }
        int x;
        scanf("%d", &x);
        int low = 0, high = nums.size()-1, mid;
        printf("%d\n", binareSearch(nums, low, high, x));
    }
    return 0;
}