基础算法篇-数组二分法

二分法原理

通过缩小区间,一直取区间的中间值进行对数组的各个元素进行判断,且可以对数组进行筛选功能,例如你确定好了在右区间,左区间就不需要再去进行判断,提升了效率

题型

关于使用二分法解决问题的经典题我就不说了,官方有很好的解答和释义,贴下链接(建议新小白可以先自己按自己方法做然后再去看解答)
一般大家在看到数组是有序,而且无重复元素的时候,我们就应该想到使用二分法
力扣二分法经典题

虽然是简单题,但是我们在初学的时候对二分法有时候还是会比较迷茫,题型一变就不会,或者一看就会,一写就废
给大家提供一种思路

首先

我们先确定题目给到的区间是全闭区间,还是半开区间,根据他是哪种再决定自己接下来的写法

  • 全闭区间:[left,right]
    1.在全闭区间中的while(left<=right)需要使用<=号,因为此处的left = right是有意义的,就是说[left,right]时,left==right是有意义的,因为都有值
    2.if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target且大于target,那么接下来要查找的左区间结束下标位置就是 middle - 1

  • 半开区间:[left,right)
    1.在半开区间中的while(left<right)需要使用<号,因为此处的left = right是无意义的,就是说[left,right)时,left==right是无意义的,因为right不在这区间内
    2.if (nums[middle] > target) right 更新为 middle,因为当前nums[middle]不等于target,去左区间继续寻找,而寻找区间是左闭右开区间,所以right更新为middle,即:下一个查询区间不会去比较nums[middle]

这就是我分享的思路,希望可以帮助到大家

posted @ 2022-07-20 10:02  宁静方能致远  阅读(24)  评论(0编辑  收藏  举报