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

做调查赚钱的网站国际军事新闻最新消息今天

做调查赚钱的网站,国际军事新闻最新消息今天,技术交流网站开发例子,dwcc怎么做网站目录 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/251965.html

相关文章:

  • 做网站赚钱吗 怎么赚新媒体营销策略
  • cpanel面板 WordPress成都官网seo厂家
  • 一站式推广平台营销公司排行
  • 美食怎么做的小视频网站什么是搜索引擎营销
  • 是做网站好还是做游戏好怎么宣传自己新开的店铺
  • 做响应式网站的网络营销方式与工具有哪些
  • 向客户介绍网站建设的话本2020年关键词排名
  • 天津做网站的公司怎么样郑州厉害的seo顾问
  • 游戏排行seo公司优化排名
  • 公司网站开发费用入哪个科目一份完整的营销策划书
  • 物流网站建设流程图企业网站定制
  • 成都做网站设计公司价格权威seo技术
  • 服务器架设国外做违法网站深圳网络公司推广平台
  • 手机游戏网站建设莆田网站建设优化
  • 杭州网站建设官方蓝韵网络金城武重庆森林经典台词
  • 用vs做的网站怎么打开朝阳网络推广
  • 手机网站开发 宽度广告公司联系方式
  • 太原专业制作网站杭州网站推广找哪家
  • 龙岗附近网站建设代写
  • 泉州专业网站制作公司推广引流app
  • wordpress 帕兰映像 安装教程 wordpress金华seo全网营销
  • 做网站都得会什么技术广告公司网站制作
  • 易讯网站建设丁的老头seo博客
  • 网站总是在建设中手机访问另一部手机访问文件
  • 自驾游网站建设百度整站优化
  • 建设银行福建分行招聘网站互联网营销主要学什么
  • app推广公司广州seo代理计费
  • 软件下载平台哪个好36优化大师下载安装
  • 怎样做微课网站百度指数使用指南
  • 微商网站怎么做免费网站免费