zoukankan      html  css  js  c++  java
  • 34. Search for a Range

    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].

    法一:

    类似使用二分法,分别找出target的起始和终点

    https://leetcode.com/problems/search-for-a-range/discuss/

    class Solution {
    public:
        vector<int> searchRange(vector<int>& nums, int target) {
            vector<int> ind(2, -1);
            if(nums.capacity() == 0) return ind;
            int l = 0, r = nums.capacity() - 1;
            while(r > l){    //寻找左边缘
                int m = (r + l)/2;
                if(nums[m] < target) l = m + 1;
                else r = m;
            }
            if(nums[l] != target) return ind;
            ind[0] = l;
            r = nums.capacity() - 1;
            while(r > l){     //寻找右边缘
                int m = (r + l)/2 + 1;    //加一使m更接近右边缘
                if(nums[m] > target) r = m - 1;
                else l = m;
            }
            ind[1] = r;
            return ind;
        }
    };

    法二:

    使用函数库:

    vector<int> searchRange(vector<int>& nums, int target) {
        auto bounds = equal_range(nums.begin(), nums.end(), target);
        if (bounds.first == bounds.second)
            return {-1, -1};
        return {bounds.first - nums.begin(), bounds.second - nums.begin() - 1};
    }
  • 相关阅读:
    js 复杂研究
    js 页面 保持状态 的方法
    C# 向上取整数
    js 获取dom 为null 测试
    net core 下 接受文件 测试
    layui 源码解读(部分)
    js 定时器
    js addEventListener
    C# 获得对象的命名空间 ?.
    修改maven的默认jdk版本
  • 原文地址:https://www.cnblogs.com/hozhangel/p/7846127.html
Copyright © 2011-2022 走看看