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

有做游戏广告的网站制作wordpress文章模板

有做游戏广告的网站,制作wordpress文章模板,免费咨询医生的软件有什么,佛山精品网站建设二分搜索\huge二分搜索二分搜索 在有序\red{有序}有序的数组中确定num是否存在 二分法应用的最常见也是最简单的场景,就是确定一个有序的数组中是否存在某个元素numnumnum。 经典二分代码: public static boolean exist(int[] arr, int num) {if (arr n…

二分搜索\huge二分搜索二分搜索

有序\red{有序}有序的数组中确定num是否存在

二分法应用的最常见也是最简单的场景,就是确定一个有序的数组中是否存在某个元素numnumnum
经典二分代码:

public static boolean exist(int[] arr, int num) {if (arr == null || arr.length == 0) {return false;}int l = 0, r = arr.length - 1, m = 0;while (l <= r) {m = l + (r - l) / 2;if (arr[m] == num) {return true;} else if (arr[m] > num) {r = m - 1;} else {l = m + 1;}}return false;
}

m=l+(r−l)/2;m = l + (r - l) / 2;m=l+(rl)/2;:可以防止intintint数据的溢出,也可以写成m=l+(r−l)>>1m = l + (r - l) >>1m=l+(rl)>>1,位运算操作。

⭐⭐⭐在有序的数组中寻找 >= num 的最左的位置

也就是说找的是 >= numnumnum最小的元素位置。
关键在于二分的方向:
① 如果midmidmid处的元素 >= numnumnum,那么midmidmid处元素是不是最左侧的 >= mmm的元素呢?并不知道,可能midmidmid的左边还有元素满足条件,于是这种情况应该向左二分(区间左缩)。并且应该记录当前的midmidmid下标,万一midmidmid左边没有符合条件的元素了,那么midmidmid下标就是答案。
② 如果midmidmid处元素 < num,显然需要往右侧二分,并且不用记录midmidmid下标,因为不满足条件。

在这里插入图片描述
代码实现:

public static int findLeft(int[] arr, int num) {int l = 0, r = arr.length - 1, m = 0;int ans = -1;while (l <= r) {m = l + (r - l) / 2;if (arr[m] >= num) {			//区间需要往左侧缩小ans = m;					//记录当前的mid下标r = m - 1;} else {l = m + 1;					//右侧二分,不需要记录答案}}return ans;
}

⭐⭐⭐ 在有序数组中找到 <= num的最右位置

也就是说需要的是,在 <= numnumnum的元素中,最右侧的元素。
同理关键也是二分的方向:
①. 如果midmidmid处的元素 <= numnumnum了,那么midmidmid处的元素是不是最右侧呢?不知道,所以需要向右侧二分。同时记录一下答案,万一当前的midmidmid处元素就是最右侧的呢。
②. 如果midmidmid处的元素 > num,那么只能往左侧二分了,并且不需要记录,因为不符合条件。

综上有:
midmidmid处元素 <= numnumnum:向右侧二分,并且记录答案
midmidmid处元素 > numnumnum:向左侧二分,不用记录答案

代码实现

public static int findRight(int[] arr, int num) {int l = 0, r = arr.length - 1, m = 0;int ans = -1;while (l <= r) {m = l + (r - l) / 2;if (arr[m] <= num) {		//向右侧二分,并且保存答案ans = m;l = m + 1;} else {					//向左侧二分,不用保留答案r = m - 1;}}return ans;
}

🔥🔥🔥🔥🔥🔥🔥🔥🔥二分搜索不一定发生在有序的数组上(以峰值问题举例)

对于二分搜索的使用场景更加扩展,不必是有序的数组上\red{不必是有序的数组上}不必是有序的数组上,特定的问题求解也是可以使用二分搜索的。

峰值问题描述
对于一个数组中,如果iii处的元素都大于i−1i-1i1i+1i+1i+1处的元素,那么iii处的元素就是一个山峰。并且规定对于nnn长度的数组,−1-11下标与nnn下标处都是一个非常小的值,也就是说111下标与n−1n-1n1下标峰值的判断只需要单边判断即可。
现在所求的是数组中有无山峰,有的话任意返回一个山峰的下标即可。

原理思想
首先判断000n−1n-1n1下标处元素,是不是山峰元素,如果是直接返回作为答案就可以结束了。
如果不是山峰元素呢?分开说
对于000处元素,如果不是峰值元素,说明111的元素必然大于000元素,也就是说元素成上升趋势在这里插入图片描述。对于n−1n-1n1下标如果不满足条件,同理可知元素成下降的趋势在这里插入图片描述
对于整个数组,左侧上升趋势,右侧下降趋势,则区间中必然存在山峰(至少一个)。在这里插入图片描述
此时将区间转换到111n−2n-2n2这个区间中,检查中点及其相邻元素的情况。
示例
在这里插入图片描述
如果中间元素满足峰值定义,那么就直接返回中间元素。否则根据趋势来进行二分搜索。中间元素左侧成下降趋势,那么必然左边区间有峰值,向左搜索。如果右侧成上升趋势,那么必然是右侧区间有峰值,向右侧搜索(二分法核心展示)。

整体流程
在这里插入图片描述
代码实现

// 峰值元素是指其值严格大于左右相邻值的元素
// 给你一个整数数组 nums,已知任何两个相邻的值都不相等
// 找到峰值元素并返回其索引
// 数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。
// 你可以假设 nums[-1] = nums[n] = 无穷小
// 你必须实现时间复杂度为 O(log n) 的算法来解决此问题。
public class Code04_FindPeakElement {// 测试链接 : https://leetcode.cn/problems/find-peak-element/class Solution {public static int findPeakElement(int[] arr) {int n = arr.length;if (arr.length == 1) {			//只有一个元素的时候0下标元素就是峰值return 0;}if (arr[0] > arr[1]) {			//判断0下标是否满足return 0;}if (arr[n - 1] > arr[n - 2]) {	//判断n-1下标是否满足return n - 1;}int l = 1, r = n - 2, m = 0, ans = -1;	 //对于区间[1,n-2]进行二分搜索while (l <= r) {m = (l + r) / 2;if (arr[m - 1] > arr[m]) {			//左边整体趋势先上后下,必然有峰值r = m - 1;} else if (arr[m] < arr[m + 1]) {	//右边整体先上后下,必然有峰值l = m + 1;} else {	ans = m;break;}}return ans;}}

特别的,如果midmidmid处的元素整体趋势是凹进去的,那么左右两侧二分都可以:
在这里插入图片描述

二分答案法(待续)

http://www.dtcms.com/wzjs/784517.html

相关文章:

  • 网站建设包括哪些内容退役厅网站建设中标公告
  • server 2012 iis 添加网站微商城登录
  • 长沙网站搭建gate网站合约怎么做空
  • 泉州市住房与城乡建设局网站贴吧aso优化贴吧
  • 计算机网站的开发流程工作汇报总结怎么写
  • 网站 网站 建设做网站被骗首付款怎么报案
  • 服务器在国外怎样做网站镜像阿里 网站建设
  • 帮人做非法网站贸易公司网站建设价格
  • 自己怎么做交易网站网站定位方案
  • 成都网站建设前十网站建设参数
  • 云南建设工程招标网站客户关系管理系统软件
  • 杭州企业建设网站公司wordpress单栏极简
  • 站长统计官网建的企业网站如何在百度搜到
  • 名校建设网站电商网站开发选题依据
  • 如何直接用jsp做网站不写servlet抖店推广
  • 网站建设需要内容聊城网站优化公司
  • 网站建设淄博佳铉网络营销服务机构
  • 网站seo哪家公司好怎样做网站 app教程
  • 建设银行暑期招聘网站工作压力大
  • 本地常州网站建设电商网站建设懂你所需
  • 沭阳网站建设托管17一起做网店
  • 小学生个人网站怎么做建设公司取名字大全最新
  • wordpress 本地 搭建网站东莞阳光网投诉查看
  • 个人网站可备案网站如何做修改密码的相关验证
  • 英文网站建设方案企业建设网站 意义何在
  • 整站下载器 安卓版wordpress插件 缩略图
  • 石家庄市建设局网站关键词优化徐州百都网络
  • 福建省城乡建设信息网站wordpress推送百度升级
  • 阿里服务器怎么做网站服务器十大搜索引擎神器
  • 阳朔网站建设公司怎么做网站排名优化免费