二分法之一发入魂:原理,实现细节,做题思路

一. 摘要这一周基本都在刷二分法的题,因此在这里做一个总结。二分法是我们耳熟能详的一种算法,其核心思想我认为就是6个字:缩小搜索范围。虽然思想简单,但是在实现的过程中却又很多细节需要注意。本文将对二分算法的原理,实现细节作简要的介绍,比从leetcode中挑选相应的题目来巩固练习。二. 原理二分算法的思想很简单,目的是通过缩小搜索范围以达到提高算法效率的目的。以在数组中搜索一个目标数字为例:...
摘要由CSDN通过智能技术生成

一. 摘要

这一周基本都在刷二分法的题,因此在这里做一个总结。二分法是我们耳熟能详的一种算法,其核心思想我认为就是6个字:缩小搜索范围。虽然思想简单,但是在实现的过程中却有很多细节需要注意。本文将对二分算法的原理,实现细节作简要的介绍,然后从leetcode中挑选一道题目来巩固练习。

二. 原理

二分算法的思想很简单,目的是通过缩小搜索范围以达到提高算法效率的目的。以“在数组中搜索一个目标数字”为例:
在这里插入图片描述
算法的步骤为:

  1. 中间的数(1号位置)是不目标值?
  2. 若不是目标值,则缩小目标区间。若该值比目标值大,则新的搜索范围为2号区域,否则为3号区域。、
  3. 不断迭代,直到找到目标值为止。

注意:使用二分法之前一定要注意!二分法只能用于有序数组中,因为他原理上是通过判断中间与目标值之间的某种关系来缩小范围,在关系缺失的前提下,算法即会失效。

三. 实现

1.程序的一般思路

我个人总结了写二分法程序的流程,如下图:
在这里插入图片描述
同样以”寻找数组中的目标值“为例,分析代码:
在这里插入图片描述

2. 细节处理

在写程序的过程中,二分法是很讲究细节的,主要包括以下四个方面。.

a. 左右边界的确定:

搜索区域的双边界一般定义为容器的两端,即:

int left = 0 //左边界
int right = nums.size()-1 //右边界

ps:有的算法喜欢把右边界定义为 nums.size(),如果写这一种做法的话后面循环条件,中心值修改都需要作修改。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值