Classical Binary Search

Description

Find any position of a target number in a sorted array. Return -1 if target does not exist.

Example

Given[1, 2, 2, 4, 5, 5].

For target =2, return 1 or 2.

For target =5, return 4 or 5.

For target =6, return -1.

Challenge

O(logn) time

Related problems

Closest Number in Sorted Array

Easy Last Position of Target

Easy First Position of Target

Implementation

Link: http://lintcode.com/en/problem/classical-binary-search/

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
        if(A.size() == 0) return -1;

        int start = 0, end = A.size() - 1;

        while(start + 1 < end) {
            int mid = start + (end - start) / 2;
            if(A[mid] == target) {
                return mid;
            } else if(A[mid] < target) {
                start = mid;
            } else {
                end = mid;
            }
        }

        if(A[start] == target) return start;
        if(A[end] == target) return end;
        return -1;
    }
};

results matching ""

    No results matching ""