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

专题三:二分查找~

二分查找模板

注意:重点是二分查找的关键在于找到区间的二段性
在这里插入图片描述

一、二分查找

链接:704. 二分查找
在这里插入图片描述

public int search(int[] nums, int target) {int left = 0,right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if(nums[mid] > target) right = mid - 1;else if (nums[mid] < target) left = mid + 1;else return mid;}return -1;}

二、在排序数组中查找元素的第一个和最后一个位置

链接: 34. 在排序数组中查找元素的第一个和最后一个位置
在这里插入图片描述

public int[] searchRange(int[] nums, int target) {int[] ret = new int[2];ret[0] = ret[1] = -1;if (nums.length == 0) return ret;//查找左端点int left = 0,right = nums.length - 1;while (left < right) {int mid = left + (right - left) / 2;if (nums[mid] < target) left = mid + 1;else right = mid;}if (nums[left] != target) return ret;else ret[0] = left;//查找右端点left = 0;right = nums.length - 1;while (left < right) {int mid = left + (right - left + 1) / 2;if (nums[mid] <= target) left = mid;else right = mid - 1;}ret[1] = right;return ret;}

三、x 的平方根

链接: 69. x 的平方根
在这里插入图片描述

public int mySqrt(int x) {if(x < 1) return 0;long left = 1,right = x;while (left < right) {long mid = left + (right -left + 1) / 2;if (mid * mid <= x) left = mid;else right = mid -1;}return (int)right;}

四、搜索插入位置

链接: 35. 搜索插入位置
在这里插入图片描述

public int searchInsert(int[] nums, int target) {int left = 0,right = nums.length - 1;while (left < right) {int mid = left + (right - left + 1) / 2;if (nums[mid] <= target) left = mid;else right = mid - 1; }if (nums[left] < target) return left + 1;return left;}

五、山脉数组的峰顶索引

链接: LCR 069. 山脉数组的峰顶索引
在这里插入图片描述

public int peakIndexInMountainArray(int[] arr) {int left = 1,right = arr.length - 2;while (left < right) {int mid = left + (right - left + 1) / 2;if (arr[mid] > arr[mid - 1]) left = mid;else right = mid - 1;}return left;}

六、寻找峰值

链接: 162. 寻找峰值
在这里插入图片描述

public int findPeakElement(int[] nums) {int left = 0,right = nums.length - 1;while (left < right) {int mid = left + (right - left + 1) / 2;if (nums[mid] < nums[mid- 1]) right = mid - 1;else left = mid;}return left;}

七、寻找旋转排序数组中的最小值

链接: 153. 寻找旋转排序数组中的最小值
在这里插入图片描述

public int findMin(int[] nums) {int left = 0,right = nums.length - 1,n = nums.length;while (left < right) {int mid = left + (right - left) /2;if (nums[mid] > nums[n - 1]) left = mid + 1;else right = mid;}return nums[left];}

八、点名

链接: LCR 173. 点名
在这里插入图片描述
1.二分查找(最优代码)

public int takeAttendance(int[] records) {int left = 0,right = records.length - 1;while (left < right) {int mid = left + (right - left) / 2;if (records[mid] == mid) left = mid + 1;else right = mid;}return records[left] == left ? left + 1 : left;}

2.哈希表

public int takeAttendance1(int[] records) {int[] hash = new int[records.length + 1];for (int x : records) {hash[x]++;}int i = 0;for (;i < hash.length;i++) {if (hash[i] == 0)return i;}return -1;}

3.位运算

public int takeAttendance2(int[] records) {int ret = records.length;for (int i = 0;i < records.length;i++) {ret ^= records[i] ^ i;}return ret;}

4.数学求和

public int takeAttendance3(int[] records) {int sum = 0;for (int i = 0;i <= records.length;i++){sum += i;}for (int  x : records) {sum -= x;}return sum;}

5.暴力求解

public int takeAttendance(int[] records) {int ret = records.length;for (int i = 0; i < ret; i++) {if (records[i] != i)return i;}return ret;}

本期内容到此为止,喜欢的话请点个赞,谢谢观看!!!

http://www.dtcms.com/a/453438.html

相关文章:

  • 360小工具合集,用39个小工具
  • GreenTuber 0.1.7.6| 纯净无广的油管第三方,支持4K下载
  • UVa 235 Typesetting
  • 东莞营销网站建设哪个平台好十大app排行榜
  • asp网站开发工具现在的企业一般用的什么邮箱
  • 企业区块链重新崛起
  • 【SSH】同一局域网下windows使用Xshell SSH连接另一台 ubuntu 22.04 电脑
  • [随手记] docker 镜像拉取记录
  • Ruoyi 赋能,百度天气不止当下:打造面向未来的预报实战
  • 网站搭建流程负责人长春制作网站哪家好
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段应用练习(7):语法 +考え方20+2022年7月N1
  • 天天爱天天做网站广告联盟没有网站怎么做
  • 1688 关键词搜索接口深度开发:从精准匹配到供应链筛选的技术实现
  • 网站多域名怎么做绿色网站模板大全
  • 深入理解 Vue 3 组件间数据传递的多种方式
  • 华威桥网站建设wordpress去除更新
  • .net 网站生成安装文件目录asp运行wordpress
  • 免费手机网站模板网站开发设计框图
  • 自助建站官网wordpress免费主机空间
  • systemd-resolved.service实验实战2
  • 基于 GEE 的 GWCCI 指数大豆识别与制图研究
  • Python argparse库介绍(内置的命令行参数解析库)(未检查)
  • JMeter之 json提取器与json path语法
  • 深度学习之神经网络2(Neural Network)
  • 做UI设计的网站网站界面设计尺寸
  • Python全栈(基础篇)——Day06:后端内容(定义函数+调用函数+实战演示+每日一题)
  • C++算法·贪心例题讲解
  • 成都正规集团网站制作维护商业综合体
  • 网站做生鲜线下推广建议wordpress可视化编辑主题
  • 《投资-81》价值投资者的认知升级与交易规则重构 - 第一层:商业模式详解、常见的优质模式商业模式、价值投资选择的标准