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

2024-09-02 00:36

本文主要是介绍【Hot100】LeetCode—34. 在排序数组中查找元素的第一个和最后一个位置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1- 思路
    • 二分 - 左侧二分 + 右侧二分
  • 2- 实现
    • ⭐34. 在排序数组中查找元素的第一个和最后一个位置——题解思路
  • 3- ACM 实现


  • 原题链接:34. 在排序数组中查找元素的第一个和最后一个位置

1- 思路

二分 - 左侧二分 + 右侧二分

  • 右区间二分 ——> 找首次出现的位置 ——>nums[mid] >= target
  • 左区间二分 ——> 找最后一次出现的位置 ——> **nums**[mid] <= target

2- 实现

⭐34. 在排序数组中查找元素的第一个和最后一个位置——题解思路

在这里插入图片描述

class Solution {public int[] searchRange(int[] nums, int target) {int[] res = new int[2];Arrays.fill(res,-1);if(nums.length == 0 || nums==null){return res;}int left = 0;int right = nums.length-1;while(left<right){int mid = (left+right)/2;if(nums[mid] >= target){right = mid;}else{left = mid+1;}}if(nums[left]==target){res[0] = left;}left = 0;right = nums.length-1;while(left<right){int mid = (left+right+1)/2;if(nums[mid] <= target){left = mid;}else{right = mid-1;}}if(nums[left]==target){res[1] = left;}return res;}
}

3- ACM 实现

public class findFirstAndLast {public static int[] finFAndL(int[] nums,int target){int[] res = new int[2];Arrays.fill(res,-1);int left = 0;int right = nums.length-1;while(left<right){int mid = (left+right)/2;if(nums[mid] >= target){right = mid;}else{left = mid+1;}}if(res[left]==target){res[0] = left;}left = 0;right = nums.length-1;while(left<right){int mid = (left+right+1)/2;if(nums[mid] <= target){left = mid;}else{right = mid-1;}}if(res[left]==target){res[1] = left;}return res;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.nextLine();input = input.substring(1,input.length()-1);String[] parts = input.split(",");int[] nums = new int[parts.length];for(int i = 0 ; i < nums.length;i++){nums[i] = Integer.parseInt(parts[i]);}System.out.println("输入target");int target = sc.nextInt();int[] res = finFAndL(nums,target);System.out.println("结果是"+res[0]+" "+res[1]);}
}

这篇关于【Hot100】LeetCode—34. 在排序数组中查找元素的第一个和最后一个位置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128493

相关文章

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Python中lambda排序的六种方法

《Python中lambda排序的六种方法》本文主要介绍了Python中使用lambda函数进行排序的六种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1.对单个变量进行排序2. 对多个变量进行排序3. 降序排列4. 单独降序1.对单个变量进行排序

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que