34. Find First and Last Position of Element in Sorted Array + 二分
题意懒得抄了,大概是:在升序数组中给定整数target,找到第一个和最后一个target的索引,找到返回{index1, index2},否则返回{-1, -1};
时间复杂度要求:O(logn)
分析:要求对数时间,又是查找,我们不难想到二分查找。但是有一点,怎么查到第一个和最后一个呢?这困扰了我。
算法:来自leetcode caikehe
1. 使用二分变体,查找target作为index1,再找target+1, 作为index2;
2. 对index做判断,如果它未越界且它的对应值等于target则返回{index1, index2-1};否则,返回{-1, -1};
源码
class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        //binary find
        int index1 = binarySearch(nums, target);
        int index2 = binarySearch(nums, target+) - ;
        if(index1 < nums.size() && nums[index1] == target)
            return {index1, index2};
        return {-, -};
    }
    //二分变体
    int binarySearch(vector<int>& nums, int target)
    {
        int l = , r = nums.size()-;
        while(l <= r)
        {
            int mid = l + (r-l)/;
            if(nums[mid] < target)
                l = mid + ;
            else
                r = mid -;
        }
        return l;
    }
};
一个较为易于理解的算法(时间复杂度可能略高于两次二分)
 class Solution {
 public:
     vector<int> searchRange(vector<int>& nums, int target) {
         int len = nums.size();
         if(len <= )
             return {-, -};
         if(len == )
             if(nums[] == target)
                 return {, };
             else
                 return {-, -};
         int l = , r = len-, mid;
         while(l <= r)
         {
             mid = l + (r-l)/;
             if(nums[mid] == target)
                 break;
             else if(nums[mid] > target)
                 r = mid - ;
             else
                 l = mid + ;
         }
         if(nums[mid] != target)
             return {-, -};
         l = mid, r = mid;
         while(l >=  && nums[l] == nums[mid])
             l--;
         while(r < len && nums[r] == nums[mid])
             r++;
         return {l+, r-};
     }
 };
34. Find First and Last Position of Element in Sorted Array + 二分的更多相关文章
- Leetcode 34 Find First and Last Position of Element in Sorted Array 解题思路 (python)
		本人编程小白,如果有写的不对.或者能更完善的地方请个位批评指正! 这个是leetcode的第34题,这道题的tag是数组,需要用到二分搜索法来解答 34. Find First and Last Po ... 
- 刷题34. Find First and Last Position of Element in Sorted Array
		一.题目说明 题目是34. Find First and Last Position of Element in Sorted Array,查找一个给定值的起止位置,时间复杂度要求是Olog(n).题 ... 
- [LeetCode] 34. Find First and Last Position of Element in Sorted Array == [LintCode] 61. Search for a Range_Easy tag: Binary Search
		Description Given a sorted array of n integers, find the starting and ending position of a given tar ... 
- [LeetCode] 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 ... 
- (二分查找 拓展) leetcode 34. Find First and Last Position of Element in Sorted Array && lintcode 61. Search for a Range
		Given an array of integers nums sorted in ascending order, find the starting and ending position of ... 
- [leetcode]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 ... 
- leetcode [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 ... 
- 34. Find First and Last Position of Element in Sorted Array (JAVA)
		Given an array of integers nums sorted in ascending order, find the starting and ending position of ... 
- 【LeetCode】34. Find First and Last Position of Element in Sorted Array 解题报告(Python & C++)
		作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 二分查找 日期 题目地址:https://leetc ... 
随机推荐
- win10安装RabbitMQ
			简单来说,两步走:先装erlang,再装rabbitmq.rabbitmq是用erlang开发的,既然erlang是一种语言,你可以把它当做Jdk来安装. 1.下载erlang安装包(官网下载地址ht ... 
- 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_13-SpringSecurityOauth2研究-JWT研究-生成JWT令牌&验证JWT令牌
			生成jwt需要用私钥来签名.在Auth认证服务下创建测试类 创建密钥工厂,构造函数需要的参数 获取私钥 有了私钥就可以生成JWT令牌 使用jwtHelper是spring security里面的类 e ... 
- java项目中ehcache缓存最简单用法
			java项目中ehcache缓存最简单用法: 1.下载ehcache-core-2.4.3.jar复制到项目的lib目录下 2.新建ehcache.xml文件,放置在项目src目录下的resour ... 
- 【Leetcode_easy】687. Longest Univalue Path
			problem 687. Longest Univalue Path 参考 1. Leetcode_easy_687. Longest Univalue Path; 2. Grandyang; 完 
- django model的update时auto_now不被更新的原因
			gmt_create自动添加auto_now_add:gmt_modify自动更新auto_now class CommonInfo(models.Model): """ ... 
- sqlserver 数据库操作导出数据sql工具
			软件名称sqldbx 下载URL https://download.csdn.net/download/yanghl1998/7832861 Navicat Premium 这个工具任何类型数据库 ... 
- VMware虚拟机中CentOS7的硬盘空间扩容
			查看centos7系统挂载点信息 扩展VMWare-centos7硬盘空间 对新增加的硬盘进行分区.格式化 添加新LVM到已有的LVM组,实现扩容 1.查看centos7系统挂载点信息 df -h查看 ... 
- cocos creator 倒计时code
			let countDownNode = this.viewNode.getChildByName('countDownNode').getComponent(cc.Label); countDownN ... 
- uwp,右键浮出获取DataContext(数据上下文)
			列表视图类控件,如ListView/GridView,有时项目需要按下右键浮出选项,来获取Item的DataContext. 下面的示例代码,事先我已经有了一个自定义类Video,并且已经绑定了数据源 ... 
- jquery入口函数的测试
			/*编写一个自定义的jquery框架*/ (function (window,undefined) { var njquery=function (selector ,) { return new j ... 
