• leetcode 34. 在排序数组中查找元素的第一个和最后一个位置


    地址 https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/

    给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

    你的算法时间复杂度必须是 O(log n) 级别。

    如果数组中不存在目标值,返回 [-1, -1]。

    示例 1:
    
    输入: nums = [5,7,7,8,8,10], target = 8
    输出: [3,4]
    示例 2:
    
    输入: nums = [5,7,7,8,8,10], target = 6
    输出: [-1,-1]

    解法 考核二分查找

    先找出最左端索引 再找出最右端第一个不符合条件索引再减去1 考虑只有一个数字符合条件的情况。

    还要注意数组只有一个数字或者没有数字的边界情况

    代码

    class Solution {
    public:
        
        
        vector<int> searchRange(vector<int>& nums, int target) {
    
        int l = 0; int r = nums.size()-1;
        if(nums.empty()) return  vector<int>(2, -1);
        if (nums.size() == 1) {
            if(nums[0] == target)
                return vector<int>(2, 0);
            else 
                return  vector<int>(2, -1);
        }
    
        while (l < r)
        {
            int mid = l + r >> 1;
            if ( nums[mid] >= target  ) r = mid;
            else l = mid + 1;
        }
        int idx = l;
        if (nums[idx] != target) 
            return vector<int>(2, -1);
    
    
        l = idx;  r = nums.size()-1;
    
        while (l < r)
        {
            int mid = l + r >> 1;
            if (nums[mid] > target) r = mid;
            else l = mid + 1;
        }
    
        int idx2 = l;
    
        if (nums[idx2] != target) 
            return vector<int>{idx,idx2-1};
    
    
        return vector<int>{idx, idx2};
    
    }
        
        
        
    };
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    iOS AppStore个人开发者账号申请
    一个工程多个Target
    React Native环境搭建(iOS、Mac)
    vuex的简单使用
    在vue中使用sass
    一个javascript继承和使用的例子
    在vue中使用Element-UI
    CSS3 Flex布局和Grid布局
    (...)ES6三点扩展运算符
    h5 video切换到横屏全屏
  • 原文地址:https://www.cnblogs.com/itdef/p/11639577.html
Copyright © 2020-2023  润新知