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

用rp怎么做网站功能按钮免费建站模板

用rp怎么做网站功能按钮,免费建站模板,互联网营销师报名入口,网站过程目录 1.概论 2.朴素的二分算法 3.求左端点的二分算法和求右端点的二分算法 4.总结 1.概论 要想了解什么是二分算法,我们就要知道什么是二分算法,二分算法是根据数组的规律,每次查找的数据原来的效率可能要O(n),而我…

目录

1.概论

2.朴素的二分算法

3.求左端点的二分算法和求右端点的二分算法

4.总结


1.概论

要想了解什么是二分算法,我们就要知道什么是二分算法,二分算法是根据数组的规律,每次查找的数据原来的效率可能要O(n),而我们可以把它优化为logN,这会大大提高我们的算法效率,总的来说我们的二分算法就是通过利用数组的规律来优化效率的一种算法下面我们把二分算法进行分类:1.朴素的二分算法。2.查找左端点的二分算法。3.查找右端点的二分算法。

下面我们遵循从简到难得规律来进行讲解,帮助大家和我一起来认识二分算法。

2.朴素的二分算法

我们空说的话比较抽象,我们直接借助题目来认识二分算法。

力扣704二分查找正好合适。

看到题目,让我们在数组中让我们去找一个目标值,我们很容易想到遍历数组,找到targe进行返回,但是它遍历数组时间复杂度较高,我们发现我们没有利用数组有序的规律,所以我们进行算法优化,我们每次求中间的值,让它跟target进行比较,等于返回找到,小的话让left=mid+1,大的话让right=mid-1.我们观察这个算法我们发现我们每次都会干掉一半的值,时间复杂度会优化到LOGN,这时候有同学就要问了:主播主播,为什么我们每次找中点呢?不能每次找三分之一点,四分之一点,五分之一点吗?当然可以,只是经过数学大牛的计算证明,发现每次求中点的效率最高,所以我们这里只需要记住我们一般每次干掉一半即可。

下面给出我们的代码实现:

int search(vector<int>& nums, int target) {int left=0;int right=nums.size()-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;}

3.求左端点的二分算法和求右端点的二分算法

下面我们再来一道题目,来讲解我们的二分算法的进阶。

这道题我们发现它让我们求一个范围,所以我们需要求出左右的范围,这里我们就要进行分析了,怎么样求呢?

经过这道题目的分析,我们也是很容易想到的暴力解法就是遍历数组进行求解,时间复杂度同样达到了O(n),那么我们接下来进行算法优化,抽象出来数组,主播的字比较难看,凑合着看吧。。。

我们发现我们求出最左节点我们就是要求大于等于的最左节点,注意我们只能求它们边界的节点,这决定了我们必须得这样划分数组。

举个反例:

我们这里只能求小于等于的最右点解,求不出小于等于中小框范围的最左节点,这是我们算法导致的。硬求的话会导致效率降低,所以我们这样划分数组。不信我们进行求,就知道为什么不行了,

我们是这样求的,mid>t,right=mid-1;mid<=t,left=mid;我们发现right进入小框的范围后,变的就只有left了,我们left不断的等于mid,会不断向右靠,讲到这里各位靓仔应该明白了吧。

所以我们进行这样的范围划分是右意义的。

还有要注意的细节这里我们当left==right之后我们结束循环,因为如果有符合范围的值,我们一般是left和right移动到同一个为止上。

第二个要注意的点就是当出现偶数的特殊情况是我们怎么解决:

我们这里对mid的处理就不同了,如果mid=left+(right-left),它是指向偶数数组中间的靠左边,这里我们发现求最左节点靠右是正常的。但是相反当mid=left+(right-left+1)/2,mid指向right,就会出现问题,因为我们mid<target,left=mid+1;left向右靠,right=mid,right向左靠,right一直等于mid,陷入死循环,所以程序崩掉了。

我们总的来说我们根据划分来确定mid怎么搞是>t,<=t的组合,还是>=t,<t的组合,

这样的情况下我们就是前者的组合,

这样的组合我们就是后者的组合

,至于求最右端点的解法,我们对求最左节点的方法反过来就可了。

下面给出本题代码题解供大家理解:

    vector<int> searchRange(vector<int>& nums, int target) {int left=0;vector<int>num;int right=nums.size()-1;while(left<right){int mid=left+(right-left)/2;if(nums[mid]<target){left=mid+1;}else{right=mid;}}if(nums.size()!=0&&nums[left]==target){num.push_back(left);}else{num.push_back(-1);}right=nums.size()-1;while(left<right){int mid=left+(right-left+1)/2;if(nums[mid]>target){right=mid-1;}else{left=mid;}}if(nums.size()!=0&&nums[left]==target){num.push_back(left);}else{num.push_back(-1);}return num;}

4.总结

要想理解二分算法,需要自己画图去理解试错,总的来说注意一下细节就可以。希望大家都可以学会这种效率算法。

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

相关文章:

  • 广告设计网站排行榜前十名济南知名网站建设平台
  • 常州 网站建设成都做一个小企业网站需要多少钱
  • 信誉好的网站建设案例想要做网站的企业
  • 郑州做网站远辰网站建设制作流程
  • 网站备案 法人用什么软件可以做网站动态
  • 国外的电商网站wordpress母婴主题
  • 家居装修企业网站源码汉中建设工程招标网
  • 昆明网站设计价格北京 网站开发 排行
  • 男女做暖暖插孔网站企业网站的结构以及内容.
  • 电商网站建设 平台济南正规网站制作怎么选择
  • html5的网站有哪些软件设计专业学什么
  • asp网站背景我做的网页怎么是危险网站
  • aspcms网站地图模板龙岗建网站
  • 超大型网站建设搞定设计
  • 各网站推广好玩的html网页代码
  • 织梦更换网站模板泰州做网站软件
  • 做网站要和企业logoseo标题优化的心得总结
  • 有哪些可以做推广的网站电商软文范例
  • 泉州学校网站建设小说网站虚拟主机
  • 上海建设工程质监站网站自己做网站费用
  • 优化网站首页学电脑培训多少钱
  • 贵阳北京小学网站建设广东网络seo推广平台
  • 网站建设算行政工作吗南通微信网站开发
  • 四川网站建设 lkcms在门户网站做产品单页多少钱一天
  • 品牌网站建设968网站制作哪家最好
  • 2017做哪些网站能致富做网页的软件哪个好用
  • 外贸营销型网站2018泰安最大的竞价排名公司
  • 淄博易宝网站建设做视频播放网站 赚钱
  • 关于网站开发的外文书籍智能营销方法
  • 手机网站你了解的武威网站制作公司哪个好