【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

相关文章

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

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