去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...

a30fc200caaae3f0fd8622be1cdb4b74.png

作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人

前文回顾:

leetcode1. 两数之和--每天刷一道leetcode系列

leetcode2. 两数相加--每天刷一道leetcode系列!

leetcode3. 无重复字符的最长子串--每天刷一道leetcode系列!

leetcode4. 寻找两个有序数组的中位数--每天刷一道leetcode系列!

leetcode5.最长回文子串--每天刷一道leetcode系列!

leetcode9. 回文数--每天刷一道leetcode系列!

leetcode11. 盛最多水的容器--每天刷一道leetcode系列!

leetcode14. 最长公共前缀--每天刷一道leetcode算法题系列!

leetcode15. 三数之和--每天刷一道leetcode算法系列!

leetcode16. 最接近的三数之和--每天刷一道leetcode算法系列!

leetcode17. 电话号码的字母组合--每天刷一道leetcode算法系列!

leetcode18. 四数之和--每天刷一道leetcode算法系列!

leetcode19. 删除链表的倒数第N个节点--每天刷一道leetcode算法系列!

leetcode20. 括号生成--每天刷一道leetcode算法系列!

leetcode21. 合并两个有序链表--每天刷一道leetcode算法系列!

leetcode22. 括号生成--每天刷一道leetcode算法系列!

leetcode23. 合并K个排序链表--每天刷一道leetcode算法系列!

leetcode24. 两两交换链表中的节点--每天刷一道leetcode算法系列!

leetcode25. K个一组翻转链表--每天刷一道leetcode算法系列!

leetcode26. 删除排序数组中的重复项--每天刷一道leetcode算法系列!

leetcode27. 移除元素--每天刷一道leetcode算法系列!

leetcode32. 最长有效括号--每天刷一道leetcode算法系列!

leetcode33. 搜索旋转排序数组--每天刷一道leetcode算法系列!

leetcode 34. 在排序数组中查找元素的第一个和最后一个位置--每天刷一道leetcode算法系列!(本篇)

题目描述

给定一个按照升序排列的整数数组 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.1如果nums[mid] < target,那么左边没有target。start = mid+1, 

1.2如果nums[mid]==target,在正常的二分查找中,这种情况是可以直接返回结果。但是因为我们是要查找左边界,这就有可能mid的左边还有可能有target这个数。因此需要进行两步操作。  

1.2.1 用一个变量res标记mid的值,如果左边还有数值等于target,则更新res的值。否则直接返回res即可。  

1.2.2 end = mid - 1,继续向左查找。

1.3 如果nums[mid] > target, 同1.2.2 end = mid - 1,继续向左查找。

如何寻找右边界呢?
2.1如果nums[mid] > target,那么右边没有target。end = mid - 1,
2.2如果nums[mid]==target,在正常的二分查找中,这种情况是可以直接返回结果。但是因为我们是要查找右边界,这就有可能mid的右边还有可能有target这个数。因此需要进行两步操作。
  2.2.1 用一个变量res标记mid的值,如果左边还有数值等于target,则更新res的值。否则直接返回res即可。
  2.2.2 start = mid + 1,继续向右查找。
2.3 如果nums[mid] < target, 同1.2.2 start = mid + 1,继续向右查找。
其实说白了,找target,找target的左边界或者找target的右边界仅仅是在nums[mid]==target的处理上有差别。

代码

public int[] searchRange(int[] nums, int target) {
        assert nums!= null;
        if(nums.length == 0){
            return new int[]{-1,-1};
        }
        int[] res = new int[]{findLeft(nums, target),findRight(nums, target)};
        return res;
    }


    private int findLeft(int[] nums, int target){
        int len = nums.length;
        int res = -1;
        int start = 0;
        int end = len - 1;
        while (start <= end){
            int mid = start + (end - start)/2;
            if(nums[mid]                 start = mid + 1;
            }
             else {
                if(nums[mid] == target){
                    res = mid;
                }
                end = mid - 1;
            }
        }

        return res;

    }

    private int findRight(int[] nums, int target){
        int len = nums.length;
        int res = -1;
        int start = 0;
        int end = len - 1;
        while (start <= end){
            int mid = start + (end - start)/2;
            if(nums[mid] > target){
                end = mid - 1;
            }
            else {
                if(nums[mid] == target){
                    res = mid;
                }
                start = mid + 1;

            }
        }

        return res;

    }

长按订阅更多面经分享

7c7f984410a36566ad23c9cd5c243040.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6个月清洗近千亿条微信支付交易记录,他们要搞什么大事情?

本文转载自腾讯技术工程官方号背景&#xff1a;2013年8月&#xff0c;微信红包上线。2014年春节微信红包引爆社交支付。2015年春晚红包摇一摇&#xff0c;推动微信红包在全国迅速普及。此后&#xff0c;每逢节假日或特殊日子&#xff0c;人们都会自主的兴起发红包&#xff0c;使…

右下角文字如何写_如何提取任意小程序的小程序路径

这几天我在写关于公众号和小程序互通的文章&#xff0c;在公众号跳转小程序的设置中有一个信息绕不过去&#xff0c;那就是小程序路径&#xff0c;对于非开发人员&#xff0c;如何轻松获取小程序路径是本文所讲述的内容本文内容本文通过具体截图文字描述&#xff0c;获取某个小…

基于Docker持续交付平台建设的实践

导读&#xff1a;中国五矿和阿里巴巴联手打造的钢铁服务专业平台五阿哥&#xff0c;通过集结阿里巴巴在大数据、电商平台和互联网产品技术上的优势&#xff0c;为终端用户带来一站式采购体验。本文是五阿哥运维技术团队针对Docker容器技术在如何在持续交付过程中探索和实践&…

计算机课件比赛总结,课件制作比赛活动总结

【www.gz85.com - 投篮比赛活动工作总结】课件制作比赛&#xff0c;是对计算机多媒体等辅助手段的一次检阅&#xff0c;也有力地促进了制作多媒体课件技艺的提高。下面是小编为您整理的“课件制作比赛活动总结”&#xff0c;仅供参考&#xff0c;希望您喜欢&#xff01;更多详细…

设置pandas显示行数_Pandas这样来设置,做数据分析舒适百倍

在日常使用pandas的过程中&#xff0c;由于我们所分析的数据表规模、格式上的差异&#xff0c;使得同样的函数或方法作用在不同数据上的效果存在差异。而pandas有着自己的一套「参数设置系统」&#xff0c;可以帮助我们在遇到不同的数据时灵活调节从而达到最好的效果&#xff0…

深度解析京东个性化推荐系统演进史

在电商领域&#xff0c;推荐的价值在于挖掘用户潜在购买需求&#xff0c;缩短用户到商品的距离&#xff0c;提升用户的购物体验。京东推荐的演进史是绚丽多彩的。京东的推荐起步于2012年&#xff0c;当时的推荐产品甚至是基于规则匹配做的。整个推荐产品线组合就像一个个松散的…

模拟微信支付服务器测试,专栏 - 腾讯WeTest-All Test in WeTest

一、异常压测场景模拟说明&#xff1a;压测服务器具备自动完成初始化(支持快速扩缩容)&#xff0c;初始化后均已支持&#xff1a;stress 、tc等工具(不需安装)1.使用stress模拟压力(CPU/内存/IO繁忙)a.如何使用&#xff1a;cpu高负载模拟&#xff1a;stress -c 44 -t 60内存高…

网易容器云平台的微服务化实践

摘要&#xff1a;网易云容器平台期望能给实施了微服务架构的团队提供完整的解决方案和闭环的用户体验&#xff0c;为此从 2016 年开始&#xff0c;我们容器服务团队内部率先开始进行 dogfooding 实践&#xff0c;看看容器云平台能不能支撑得起容器服务本身的微服务架构&#xf…

逐鹿工具显示服务器错误连接不上怎么解决,win7系统安装逐鹿工具箱提示“error launching installer”错误的解决方法...

win7系统使用久了&#xff0c;好多网友反馈说win7系统安装逐鹿工具箱提示“error launching installer”错误的问题&#xff0c;非常不方便。有什么办法可以永久解决win7系统安装逐鹿工具箱提示“error launching installer”错误的问题&#xff0c;面对win7系统安装逐鹿工具箱…

唯品会2017年双11大促技术保障实践,全域提供25万QPS服务能力

作者简介&#xff1a;刘惊惊&#xff0c;唯品会业务架构部高级架构师&#xff0c;负责唯品会电商平台的用户系统&#xff0c;营销系统和库存系统的架构设计工作。2016年加入唯品会&#xff0c;参与了唯品会电商系统的大重构&#xff0c;负责多个核心系统的梳理和大促准备。 张…

iis7 mysql_windows 7 下搭建php开发环境(windows7+IIS7+php+mysql)

首先需要说明的是&#xff0c;基于IIS v6.0/v7.0(2008)&#xff0c;可以支持的脚本相当完整&#xff0c;不仅支持Linux无法支持的asp/asp.net&#xff0c;还可以安装php、mysql、zend实现php环境。同时&#xff0c;利用Serv-U可以实现ftp管理。操作简单&#xff0c;无需键入任何…

从核心技术到高可用实践——解密数据库深度挖掘指南

SDCC系列峰会各站在技术圈遍地花开之余&#xff0c;主办方CSDN为了更好地服务技术开发者并拓展受众&#xff0c;同步启动SDCC 2017系列之线上峰会——线上线下双管齐下&#xff0c;一举打破地域限制&#xff0c;内容为基&#xff0c;便捷加成&#xff0c;带来更友好的听众体验。…

Unity中Shader观察空间推导

文章目录 前言一、本地空间怎么转化到观察空间二、怎么得到观察空间的基向量1、Z轴向量2、假设 观察空间的 Y~假设~ (0,1,0)3、X Y 与 Z 的叉积4、Y X 与 Z 的叉积 三、求 [V~world~]^T^1、求V~world~2、求[V~world~]^T^ 四、求出最后在Unity中使用的公式1、偏移坐标轴2、把…

portainer 启动mysql_docker 安装portainer容器后,启动/Portainer 安装MySQL并开启远程访问...

启动命令&#xff1a;docker run -d -p 9000:9000 --restartalways -v /var/run/docker.sock:/var/run/docker.sock --name portainer docker.io/portainer/portainer下载mysql镜像文件:docker search mysqldocker pull mysql:5.7.32创建mysql容器&#xff1a;docker run -d --…

追求极简:Docker镜像构建演化史

作者简介&#xff1a;白明&#xff0c;东软互联网运营平台技术负责人&#xff0c;毕业于哈尔滨工业大学&#xff0c;Go语言专家&#xff0c;GopherChina讲师&#xff0c;技术培训师和撰稿人&#xff0c;博客tonybai.com作者&#xff0c;拥有多年后端服务架构设计和开发经验。目…

特征选择算法在微博业务应用中的演进历程

近年来&#xff0c;人工智能与机器学习的应用越来越广泛&#xff0c;尤其是在互联网领域。在微博&#xff0c;机器学习被广泛地应用于微博的各个业务&#xff0c;如Feed流、热门微博、消息推送、反垃圾、内容推荐等。值得注意的是&#xff0c;深度学习作为人工智能和机器学习的…

c winform mysql类_C#连接MySQL数据库操作类

首先需要安装MySQL Connector Net 6.8.3然后在项目中引用MySQL Connector&#xff0c;如下图所示C#连接MySQL的操作类代码如下&#xff1a;public class MySQLHelper{private string db_host "localhost"; //数据库服务器private string db_port "3306";…

病历智能处理引擎的架构设计、实现和应用

作者简介&#xff1a;吴大帅&#xff0c;新屿算法工程师&#xff0c;曾供职于宅米网、新达达&#xff0c;从事系统架构设计、算法设计等工作。 李智慧&#xff0c;《大型网站技术架构&#xff1a;核心原理与案例分析》作者&#xff0c;从事大型网站、分布式系统、大数据方面的研…

Heron:来自Twitter的新一代流处理引擎应用篇

作者 | 吴惠君&#xff0c;吕能&#xff0c;符茂松责编 | 郭芮【导语】 本文对比了Heron和常见的流处理项目&#xff0c;包括Storm、Flink、Spark Streaming和Kafka Streams&#xff0c;归纳了系统选型的要点。此外实践了Heron的一个案例&#xff0c;以及讨论了Heron在这一年开…

2017 JavaScript 调查报告概述

本文转载自极光日报知乎专栏&#xff0c;地址&#xff1a;https://zhuanlan.zhihu.com/p/32260460简评&#xff1a;最近一份超过 23,000 名开发者参与的关于 JavaScript 的调查报告 - the State of JavaScript 2017 出炉了。内容包含框架的流行趋势、薪资水平等等&#xff0c;感…