leetcode006-Search for a Range

来源:互联网 发布:获取对方通话记录软件 编辑:程序博客网 时间:2024/06/05 22:55

Given an array of integers 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].

For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,

return [3, 4].


解题思路:1.排序

  2.二分法找到target

    3.从target所在位置往两边扫描,直到两边各自出现不等于target的元素


以下是AC的代码

class Solution {public:    vector<int> searchRange(vector<int>& nums, int target) {        if(nums.empty() || (nums.size()==1 && nums[0] != target)) return vector<int>{-1,-1};        int low=0,high=nums.size()-1;        while (low <= high) {            int mid = (high - low) / 2 + low;            if (nums[mid] > target) {                high = mid-1;            } else if (nums[mid] < target) {                low = mid+1;            } else {                int i = mid, j = mid;                while (i >= 0 && nums[mid] == nums[i]) {                    i--;                }                while (j <= nums.size()-1 && nums[mid] == nums[j]) {                    j++;                }                                return vector<int>{++i,--j};            }        }        return vector<int>{-1,-1};    }};



原创粉丝点击