Skip to content

Latest commit

 

History

History
50 lines (48 loc) · 1.34 KB

034.md

File metadata and controls

50 lines (48 loc) · 1.34 KB

34. Find First and Last Position of Element in Sorted Array

Solution 1 (O(log(n)))

// Binary search
class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        vector<int> ans;
        int left, right;
        // search for starting position
        left = 0;
        right = nums.size() - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (target == nums[mid] &&
                (mid == 0 || target != nums[mid - 1])) {
                ans.push_back(mid);
                break;
            } else if (target <= nums[mid]) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        if (ans.empty()) {
            ans.push_back(-1);
            ans.push_back(-1);
            return ans;
        }
        // search for ending position
        left = ans[0];
        right = nums.size() - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (target == nums[mid] &&
                (mid == nums.size() - 1 || target != nums[mid + 1])) {
                ans.push_back(mid);
                break;
            } else if (target < nums[mid]) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return ans;
    }
};