当前位置: 首页 > article >正文

【LeetCode】【算法】34. 在排序数组中查找元素的第一个和最后一个位置

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

题目描述

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

思路

思路:二分查找找到目标值target,再通过两个while循环,分别向左找开始位置、向右找结束位置

代码

class Solution {
    public int[] searchRange(int[] nums, int target) {
        if (nums.length == 0)
            return new int[]{-1, -1};
        int re = -1;
        int left = 0;
        int right = nums.length - 1;
        int middle = -10000;
        while (left <= right){
            middle = (left + right) / 2;
            if (nums[middle] == target){
                re = middle;
                break;
            }
            else if(nums[middle] < target)
                left = middle + 1;
            else if(nums[middle] > target)
                right = middle - 1;
        }
        if (re == -1)
            return new int[]{-1, -1};
        else {
            int min = re;
            int max = re;
            int idx = re;
            while (idx != 0){
                idx--;
                if (nums[idx] == target)
                    min = idx;
                else
                    break;
            }
            while (idx + 1 != nums.length){
                idx++;
                if (nums[idx] == target)
                    max = idx;
                else
                    break;
            }
            return new int[]{min, max};
        }
    }
}

http://www.kler.cn/a/391015.html

相关文章:

  • 俏美韵从心出发,与女性一道为健康生活贡献力量
  • 项目集章程program charter
  • 算法——移除链表元素(leetcode203)
  • ML 系列: 第 23 节 — 离散概率分布 (多项式分布)
  • 使用jmeter查询项目数据库信息,保存至本地txt或excel文件1108
  • Web安全之SQL注入---基础
  • 微信小程序的云开发
  • 13、DHCP和FTP协议
  • 利用AI制作《职业生涯规划PPT》,10分钟完成
  • 【Linux】————信号
  • leetcode21:合并两个有序列表
  • [Linux]IO多路转接(上)
  • 微波无源器件 OMT1 一种用于倍频程接收机前端的十字转门四脊正交模耦合器(24-51GHz)
  • Java-03
  • SQL50题
  • ubuntu 20.04 NVIDIA驱动、cuda、cuDNN安装
  • Python 类私化有笔记
  • 【深度学习遥感分割|论文解读2】UNetFormer:一种类UNet的Transformer,用于高效的遥感城市场景图像语义分割
  • 量化交易系统开发-实时行情自动化交易-3.4.2.2.Okex交易数据
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(十三)SpringBoot连接MongoDB
  • 请求接口时跨域问题详细解决方案
  • 前端开发调试之 PC 端调试
  • 使用 `RestTemplate` 获取二进制数据并返回 `byte[]`:解决方案与示例
  • Java 多态 (Polymorphism)详解
  • 智能社区服务小程序+ssm
  • MySQL数据库:SQL语言入门 (学习笔记)