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

剑指Offer系列(java版,详细解析)53.在排序数组中查找数字

题目描述

剑指 Offer 53 - I. 在排序数组中查找数字 I

难度简单119收藏分享切换为英文接收动态反馈

统计一个数字在排序数组中出现的次数。

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: 2

示例 2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: 0

限制:

0 <= 数组长度 <= 50000

**注意:**本题与主站 34 题相同(仅返回值不同):https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/

测试用例

  • 功能测试(数组中包含要查找的数字;数组中没有要查找的数字;要查找的数字在数组中出现一次/多次)
  • 边界值测试(查找数组中的最大值、最小值;数组中只有一个数字)
  • 特殊输入测试(表示数组的指针为空指针)

题目考点

  • 考察应聘者的只是迁移能力。
  • 考察应聘者对二分查找算法的理解程度。

解题思路

一看到在排序数组中查找,大家一定能想到二分查找法,但是怎么用可以减少复杂度,that is problem.

  1. 利用二分查找法找出最早(左)出现的k的下标
  2. 利用二分查找法找出最晚(右)出现的k的下标
class Solution {
    public int search(int[] nums, int target) {
        // 搜索右边界 right
        int i = 0, j = nums.length - 1;
        while(i <= j) {
            int m = (i + j) / 2;
            if(nums[m] <= target) i = m + 1;
            else j = m - 1;
        }
        int right = i;
        // 若数组中无 target ,则提前返回
        if(j >= 0 && nums[j] != target) return 0;
        // 搜索左边界 right
        i = 0; j = nums.length - 1;
        while(i <= j) {
            int m = (i + j) / 2;
            if(nums[m] < target) i = m + 1;
            else j = m - 1;
        }
        int left = j;
        return right - left - 1;
    }
}

相关文章:

  • 剑指Offer系列(java版,详细解析)54.二叉搜索树的第K大的节点
  • 剑指Offer系列(java版,详细解析)55.二叉树的深度
  • 剑指Offer系列(java版,详细解析)56.数字中数字出现的次数
  • 剑指Offer系列(java版,详细解析)57.和为s的数字
  • 剑指Offer系列(java版,详细解析)58.翻转字符串
  • 剑指Offer系列(java版,详细解析)59.队列的最大值
  • 剑指Offer系列(java版,详细解析)60.n个骰子的点数
  • 剑指Offer系列(java版,详细解析)61.扑克牌中的顺子
  • 剑指Offer系列(java版,详细解析)62.圆圈中最后剩下的数字
  • 剑指Offer系列(java版,详细解析)63.股票的最大利润
  • 剑指Offer系列(java版,详细解析)64.求1+2+...+n
  • 剑指Offer系列(java版,详细解析)65.不用加减乘除做加法
  • 剑指Offer系列(java版,详细解析)66.构建乘积数组
  • 剑指Offer系列(java版,详细解析)67.把字符串转化成整数
  • 剑指Offer系列(java版,详细解析)68.树中两个节点的最低公共祖先
  • Android单元测试 - 几个重要问题
  • Android组件 - 收藏集 - 掘金
  • CAP理论的例子讲解
  • EventListener原理
  • Go 语言编译器的 //go: 详解
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JavaScript学习总结——原型
  • Java-详解HashMap
  • SpingCloudBus整合RabbitMQ
  • Swoft 源码剖析 - 代码自动更新机制
  • Web标准制定过程
  • 分类模型——Logistics Regression
  • 浮现式设计
  • 基于axios的vue插件,让http请求更简单
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • MyCAT水平分库
  • postgresql行列转换函数
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​第20课 在Android Native开发中加入新的C++类
  • ​马来语翻译中文去哪比较好?
  • #微信小程序:微信小程序常见的配置传旨
  • (10)STL算法之搜索(二) 二分查找
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (办公)springboot配置aop处理请求.
  • (附源码)php投票系统 毕业设计 121500
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)socket Aio demo
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转)原始图像数据和PDF中的图像数据
  • (转载)Linux网络编程入门
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET 中让 Task 支持带超时的异步等待
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?