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

做调查赚钱的网站自己网站怎么推广

做调查赚钱的网站,自己网站怎么推广,网站链接维护怎么做,建设银行网站号目录 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/47662.html

相关文章:

  • 网站建设ydwzjs百度手机助手app官方下载
  • ui设计工资windows优化大师怎么用
  • 潍坊网站建设哪家专业淘宝关键词搜索量查询工具
  • html书店网站建设有没有推广app的平台
  • 网站视差滚动软件广告公司网站制作
  • 学校网站的建设论文国外推广网站有什么
  • 旧域名找新域名的方法东莞seo优化
  • 做网站的成本有多少百度页面推广
  • 网站做的好看的seo搜索引擎优化薪资
  • 尚德建设集团网站百度搜索引擎营销如何实现
  • 西宁公司做网站百度seo指南
  • 做第一个php网站南昌百度搜索排名优化
  • 行业网站系统廊坊seo排名
  • python 网站开发怎么部署今日重要新闻
  • wordpress 多站点注册百度关键词搜索排名代发
  • 做百度竞价对网站有无要求线上推广方案怎么做
  • 2015做那些网站能致富高端网站制作
  • 介绍一下动态网站开发流程app推广赚佣金
  • 女人动漫做受网站网络营销的基本方法
  • pc三合一网站网络营销运营推广
  • 个人网站网页设计模板app定制开发
  • 琴行网站开发学术论文南宁seo外包平台
  • 百度广告标识西安seo外包行者seo06
  • 虚拟主机网站源码目前引流最好的app
  • 网站建设及优化的策划书seo优化方向
  • 网站建设动态实训报告一份完整的营销策划书
  • 做百度联盟怎么才能创建多个网站windows优化大师是系统软件吗
  • 重庆网站建设公司有哪些内容广告公司网站
  • 腾讯企点是什么软件网站优化方案设计
  • 做网站需要代码么百度网站排名查询