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

剑指 Offer 53 - I. !!在排序数组中查找数字 I (考查二分法)

剑指 Offer 53 - I. 在排序数组中查找数字 I
统计一个数字在排序数组中出现的次数。

示例 1:

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

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

提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
nums 是一个非递减数组
-109 <= target <= 109

解法一:
我觉得难点不是想到用二分法(题目中指明给定有序数组就是明显地暗示:可以使用二分法);
而是如何设计二分法……这个我还在学习,比如while循环条件要不要等号,循环内部left是等于mid,还是mid+1,等等;
我日后来补补二分法专项……

  public int search(int[] nums, int target){if(nums==null || nums.length==0) return 0;int first = rightBound(nums,target-1);// the index where target firstly appearsint last = rightBound(nums,target);// the index after the last targetreturn last-first;}public int rightBound(int[] nums,int target){// 返回第一个大于target的元素的位置int i=0,j=nums.length-1;while(i<=j){int mid = (i+j)/2;if(nums[mid]<=target) i=mid+1;else j=mid-1; }return i;}

第二种解法
首先,沿用解法一:首先找到“=target区”的右边界(开的,表示这个边界所指的元素不是target);
然后,遍历着数有多少相同的元素。

 public int search(int[] nums, int target){int l=0,r=nums.length-1;int mid=0;while(l<=r){mid = (r+l)/2;if(nums[mid]<=target) l=mid+1;else r = mid-1;}// l is the open right boundl-=1;int count=0;while(l>=0 && nums[l]==target){l--;count++;}return count;}
http://www.lryc.cn/news/109125.html

相关文章:

  • RANSAC算法在Python中的实现与应用探索:线性拟合与平面拟合示例
  • PHP接口自动化测试框架实现
  • VLAN原理+配置
  • MongoDB文档-基础使用-在客户端(dos窗口)/可视化工具中使用MongoDB基础语句
  • “RISC-V成长日记” blog发布,第一个运行在RISC-V服务器上的blog?
  • gitlab配置webhook
  • 编译安装Linux内核实践与踩坑
  • 郑州https数字证书
  • 第125天:内网安全-隧道技术SMBICMP正反向连接防火墙出入规则上线
  • 性能测试怎么做?测试工具怎么选择?
  • 【Eclise配置Jdk环境】Jre环境常见配置错误问题
  • UM2080F32——32位SoC芯片
  • IDEA基础使用
  • [数据集][目标检测]遛狗不牵绳数据集VOC格式-1980张
  • 基于WebRTC升级的低延时直播
  • 数学知识(二)
  • Java实现数据库表中的七种连接【Mysql】
  • 452. 用最少数量的箭引爆气球
  • HTML <rp> 标签
  • 常见的设计模式(超详细)
  • Excel 超牛的格式调整汇总——你还在担心你做出来的表不好看吗
  • hyperf 十二、自动化测试
  • dblink简单使用
  • Typescript 第十一章 与JavaScript互操作(外参变量声明,外参类型声明,外参模块声明)
  • 从0到1框架搭建,Python+Pytest+Allure+Git+Jenkins接口自动化框架(超细整理)
  • 在windows配置redis的一些错误及解决方案
  • 真机搭建中小网络
  • Linux:shell脚本:基础使用(1)
  • carla中lka实现(一)
  • 常见的数据结构(顺序表、顺序表、链表、栈、队列、二叉树)