LeetCode第34题:在排序数组中查找元素的第一个和最后一个位置(中等)_new_whiter的博客-程序员秘密

技术标签: 学生  LeetCode第34题:在排序数组中查找元素的第一个和最后一个位置(  

LeetCode第34题:在排序数组中查找元素的第一个和最后一个位置(中等)

  • 题目:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。
  • 解法一:算是一种暴力解法了,没有关注到数组已排序,其实这种做法自己也觉得很无聊。。。。
class Solution {
    
    public int[] searchRange(int[] nums, int target) {
    
        int ans[]=new int[]{
    -1,-1};
        int len=nums.length;
        if(len==0)  return ans;
        int L=0,R=len-1;
        while(L<len){
    
            if(nums[L]==target){
    
                ans[0]=L;
                break;
            }else{
    
                L++;
            }
        }
        while(R>=0){
    
            if(nums[R]==target){
    
                ans[1]=R;
                break;
            }else{
    
                R--;
            }
        }
        return ans;
    }
}

在这里插入图片描述

  • 解法二:换了一种解法感觉只是在内存上好了一点
class Solution {
    
    public int[] searchRange(int[] nums, int target) {
    
        int ans[]=new int[]{
    -1,-1};
        int len=nums.length;
        if(len==0)  return ans;
        for(int i=0;i<len;){
    
            if(nums[i]==target && ans[0]==-1){
    
                ans[0]=i;
            }
            if(nums[i]==target){
    
                ans[1]=i;
            }else if(nums[i]>target){
    
                break;
            }
            i++;
        }
        return ans;
    }
}

在这里插入图片描述

  • 解法三:想用二分法减少运行时间,结果是最不好的一种解法。。23333
class Solution {
    
    public int[] searchRange(int[] nums, int target) {
    
        int ans[]=new int[]{
    -1,-1};
        int len=nums.length;
        int start,end;
        if(len==0)  return ans;
        if(nums[len/2] < target){
    
            start=len/2;
            end=len;
        }else if(nums[len/2] > target){
    
            start=0;
            end=len/2;
        }else{
    
            start=0;
            end=len;
        } 
        for(int i=start;i<end;){
    
            if(nums[i]==target && ans[0]==-1){
    
                ans[0]=i;
            }
            if(nums[i]==target){
    
                ans[1]=i;
            }else if(nums[i]>target){
    
                break;
            }
            i++;
        }
        return ans;
    }
}

在这里插入图片描述

  • 解法四:额。。。看到了真正的二分法。。。。原来二分法这么优秀的。。
class Solution {
    
    // returns leftmost (or rightmost) index at which `target` should be
    // inserted in sorted array `nums` via binary search.
    private int extremeInsertionIndex(int[] nums, int target, boolean left) {
    
        int lo = 0;
        int hi = nums.length;

        while (lo < hi) {
    
            int mid = (lo + hi) / 2;
            if (nums[mid] > target || (left && target == nums[mid])) {
    
                hi = mid;
            }
            else {
    
                lo = mid+1;
            }
        }

        return lo;
    }

    public int[] searchRange(int[] nums, int target) {
    
        int[] targetRange = {
    -1, -1};

        int leftIdx = extremeInsertionIndex(nums, target, true);

        // assert that `leftIdx` is within the array bounds and that `target`
        // is actually in `nums`.
        if (leftIdx == nums.length || nums[leftIdx] != target) {
    
            return targetRange;
        }

        targetRange[0] = leftIdx;
        targetRange[1] = extremeInsertionIndex(nums, target, false)-1;

        return targetRange;
    }
}

作者:LeetCode
链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/zai-pai-xu-shu-zu-zhong-cha-zhao-yuan-su-de-di-yi-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/new_whiter/article/details/103507050

智能推荐

(职员)2015-12-04 星期五 日志_weixin_30326741的博客-程序员秘密

今天主要在做大厅服务器和水浒传的服务器的通信1.完成了大厅服务器对水浒传服务器发送的报文的整理2.完成了大厅服务器接收水浒传游戏服务器报文到来的相应功能体会:在实际的做的过程中慢慢明白了大厅服务器的结构和相关的功能。大厅服务器相对比较杂,和多方通信,起控制和报文转发的功能。连接客户端和游戏服务器。转载于:https://www.cnblogs.com/f-g-k/p/5020043.html...

零长度数组 ,_零长数组可以不malloc吗_ren1204的博客-程序员秘密

不占用结构体空间,使用分配内存,但是可以使用,使用完不用释放内存。零长度数组内存大小没有限制,使用指针不能偏移(除非使用malloc,给零长度数组分配内存)例如:typedef struct{      char *data;      char buf[0];}buf_t; int main(){     buf_t   buf;      cha...

【数据结构】C语言实现顺序表的一些基本操作_c语言实现顺序表内取值_柘月十七的博客-程序员秘密

基本操作:初始化赋值是否为空取值定位元素位置删除元素插入元素遍历顺序表结果:代码:#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#define MAXSIZE 100#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status; //Stat

第六课_质量管理、人力资源管理_weixin_33737774的博客-程序员秘密

一、质量管理1、质量管理基本原则?1、以使用为核心的多远要求;2、系统工程;3、职工参与管理;4、管理层和第一把手重视;5、保护消费者权益;6、面向国际市场;2、质量管理的目标?1、顾客满意度;2、预防胜于检查;3、各阶段内的过程;3、质量管理的主要活动有哪些?(记)1、质量策划;2、质量保证;3、质量控制;4、质量管理流程包括哪四个环节?(记)(按P'DCA理解记忆)...

Van-UI发送验证码demo -效果篇_草巾冒小子的博客-程序员秘密

Van-UI发送验证码样式:&amp;amp;lt;van-field v-model=&amp;quot;salaryRange&amp;quot; center disabled label=&amp;quot;薪资&amp;quot; placeholder=&amp;quot;请输入薪资&amp;quot; &amp;amp;gt;

PHP DES加密/解密 ECB 、pkcs5/pkcs7_tyasdxx的博客-程序员秘密

加密方式与http://tool.chacuo.net/cryptdes加密方式一样<?phpecho '';$key = '1234';$jiami = encrypt('123',$key);echo $jiami.'';echo decrypt($jiami,$key);//加密function encrypt($str, $key){ $block

随便推点

JMeter后置处理器之通过JSON提取器获取变量_jmeter查看提取器的变量值_Carol2016的博客-程序员秘密

1. JSON提取器是专门用来对返回的响应结果是application/json格式的报文进行提取,如下所示2. 首先在需要提前变量的HTTP请求点击右键--添加--后置处理器--JSON提取器3. JSON提取器,变量应用范围,默认选择Main sample only即可,关于应用范围,我们大多数勾选“mainsampleonly”就足够了,因为我们一个请求,实质上只有一个请求。但是当我们发一个请求时,可以触发多个服务器请求,类似于ajax那种,那么就有mainsample...

android开发 使用RecycleView加载数据_android往recview中添加数据_Android小屋的博客-程序员秘密

AndroidStudio RecycleView的添加在另外的一篇博客里,就不说了, 话不多说,直接上代码(我这里是直接解析assets下的json数据显示在RecycleView中的,比较简单): JsonData:[ { "id": "1", "version": "1", "name": "Angry Birds" }, { "id": "2"

紫光国芯 数字后端 面经_紫光国芯面经_csdn用户7的博客-程序员秘密

最早的一家,8月17日连续两面965,性价比不错技术面30分钟,视频自我介绍项目介绍,直接介绍7nm工艺有哪些特点,物理设计需要注意什么芯片面积,频率,门数Floorplan怎么做的,为什么floorplan做完后做过哪些检查做过哪些模式的STA(主要项目从65nm到14nm都有,PR工具为ICC2)HR面15分钟,视频成绩,爱好,家庭,期望薪资...

redis-Sentinel哨兵机制_况祥彬的博客-程序员秘密

文章目录Sentinel三大功能功能一:监控检测主观下线状态:down-after-milliseconds检查客观下线状态:少数服从多数功能二:选主,功能三:通知第一步:选举领头Sentinel第二步:选出新的主服务器第三步:修改从服务器的复制目标第四步:将旧的主服务器变为从服务器哨兵集群、哨兵与主从库、哨兵与客户端启动并初始化Sentinel流程获取主服务器信息:INFO获取从服务器信息:INFO向主服务器和从服务器发送信息:命令连接接收来自主服务器和从服务器的频道信息:订阅连接基于pub/sub机制的

第 22 章 Node.js 安装_powerx_yc的博客-程序员秘密

目录22.1. Ubuntu22.2. CentOS22.3. npm -- node package manager22.3.1. link22.4. pm222.4.1. logs22.5. Loop22.5.1. forEachhttp://nodejs.org/ 22.1.Ubuntu$ sudo ...

Prometheus监控机配置说明_illidanjiang的博客-程序员秘密

1. 被监控机配置1.1. 上传监控客户端进入目录/home/monitor,上传node_exporter-0.14.0.linux-amd64.tar.gz 文件(用monitor用户上传)。1.2. 启动监控客户端进程解压,命令:tar -zxvf node_exporter-0.14.0.linux-amd64.tar.gz进入目录,命令:cd node_exporter-0....

推荐文章

热门文章

相关标签