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

Posted qiang-wei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了34- Find First and Last Position of Element in Sorted Array相关的知识,希望对你有一定的参考价值。

Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.

Your algorithm‘s runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

Example 1:

Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]

Example 2:

Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]

我的解:

Runtime: 12 ms, faster than 32.21% of C++ online submissions for Find First and Last Position of Element in Sorted Array.
Memory Usage: 10.2 MB, less than 98.90% of C++ online submissions for Find First and Last Position of Element in Sorted Array.
class Solution {
public:
    // 递归进行,二分查找
    void binSearch(vector<int>& nums, int target, int begin, int end, int& index1, int& index2)
    {
        while (begin <= end)
        {
            int mid = begin + (end - begin) / 2;
            if (nums[mid] == target)
            {
                if (mid < index1)index1 = mid;
                if (mid > index2)index2 = mid;
                if (begin == end) return ;
                if (mid > 0 && nums[mid - 1] == target) binSearch(nums, target, begin, mid - 1, index1, index2);
                if (mid < end && nums[mid + 1] == target) binSearch(nums, target, mid + 1, end, index1, index2);
                return;
            }
            if (nums[mid] < target)
            {
                begin = mid + 1;
            }
            if (nums[mid] > target)
            {
                end = mid - 1;
            }
        }
    }
    vector<int> searchRange(vector<int>& nums, int target) {
        vector<int> res{ -1,-1 };
        if (nums.size() < 1)return res;
        int b = 0;
        int e = nums.size() - 1;
        int index1 = e + 1;
        int index2 = b - 1;
        binSearch(nums, target, b, e, index1, index2);
        if (index1 <= index2)
        {
            res[0] = index1;
            res[1] = index2;
        }
        return res;
    }
};

优秀解1:

Runtime: 8 ms, faster than 85.03% of C++ online submissions for Find First and Last Position of Element in Sorted Array.
Memory Usage: 10.1 MB, less than 100.00% of C++ online submissions for Find First and Last Position of Element in Sorted Array.
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
    int idx1 = lower_bound(nums, target);
    int idx2 = lower_bound(nums, target+1)-1;
    if (idx1 < nums.size() && nums[idx1] == target)
        return {idx1, idx2};
    else
        return {-1, -1};
}

// 利用二分查找的思想
int lower_bound(vector<int>& nums, int target) { int l = 0, r = nums.size()-1; while (l <= r) { int mid = (r-l)/2+l; if (nums[mid] < target) l = mid+1; else r = mid-1; } return l; } };

 

 

 

以上是关于34- Find First and Last Position of Element in Sorted Array的主要内容,如果未能解决你的问题,请参考以下文章

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

[leetcode][34] Find First and Last Position of Element in Sorted Array

[二分搜索] leetcode 34 Find First and Last Position of Element in Sorted Array

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

Leetcode 34 Find First and Last Position of Element in Sorted Array 解题思路 (python)

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