lintcode-457-经典二分查找问题

457-经典二分查找问题

在一个排序数组中找一个数,返回该数出现的任意位置,如果不存在,返回-1

样例

给出数组 [1, 2, 2, 4, 5, 5].
对于 target = 2, 返回 1 或者 2.
对于 target = 5, 返回 4 或者 5.
对于 target = 6, 返回 -1.

挑战

O(logn) 的时间

标签

二分法

code

class Solution {
public:
    /**
     * @param A an integer array sorted in ascending order
     * @param target an integer
     * @return an integer
     */
    int findPosition(vector<int>& A, int target) {
        // Write your code here
        int size = A.size();
        if (size <= 0) {
            return -1;
        }
        if (target<A[0] || target>A[size - 1]) {
            return -1;
        }
        int low = 0, high = size - 1;
        while (low <= high) {
            int mid = low + (high - low) / 2;
            if (target == A[mid]) {
                return mid;
            }
            else if (target < A[mid]) {
                high = mid - 1;
            }
            else {
                low = mid + 1;
            }
        }
        return -1;
    }
};
posted @ 2017-08-20 19:21  LiBaoquan  阅读(216)  评论(0编辑  收藏  举报